From f7a495685ba2b7ca75696af4bfa647241d44f70e Mon Sep 17 00:00:00 2001 From: dotasek Date: Thu, 6 Jun 2024 16:21:14 -0400 Subject: [PATCH 01/68] Fix case typo in Consent.ProvisionComponent --- .../resources30_40/Consent30_40.java | 13 +- .../resources40_50/Consent40_50.java | 9 +- .../org/hl7/fhir/r4/formats/RdfParser.java | 2 +- .../org/hl7/fhir/r4/formats/XmlParser.java | 12 +- .../java/org/hl7/fhir/r4/model/Consent.java | 140 +++++++++--------- 5 files changed, 89 insertions(+), 87 deletions(-) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java index 1c783f74c..eaf5aba5a 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java @@ -13,6 +13,7 @@ import org.hl7.fhir.convertors.conv30_40.datatypes30_40.primitivetypes30_40.Date import org.hl7.fhir.convertors.conv30_40.datatypes30_40.primitivetypes30_40.Uri30_40; import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Consent; import org.hl7.fhir.r4.model.Identifier; public class Consent30_40 { @@ -47,7 +48,7 @@ public class Consent30_40 { tgt.setPolicyRule(new CodeableConcept(c)); } if (src.hasSecurityLabel() || src.hasPeriod() || src.hasActor() || src.hasAction() || src.hasPurpose() || src.hasDataPeriod() || src.hasData() || src.hasExcept()) { - org.hl7.fhir.r4.model.Consent.provisionComponent pc = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + Consent.ProvisionComponent pc = new Consent.ProvisionComponent(); if (src.hasPeriod()) pc.setPeriod(Period30_40.convertPeriod(src.getPeriod())); for (org.hl7.fhir.dstu3.model.Consent.ConsentActorComponent t : src.getActor()) @@ -104,7 +105,7 @@ public class Consent30_40 { } } if (src.hasProvision()) { - org.hl7.fhir.r4.model.Consent.provisionComponent p = src.getProvision(); + Consent.ProvisionComponent p = src.getProvision(); if (p.hasPeriod()) tgt.setPeriod(Period30_40.convertPeriod(p.getPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionActorComponent t : p.getActor()) @@ -117,7 +118,7 @@ public class Consent30_40 { tgt.setDataPeriod(Period30_40.convertPeriod(p.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : p.getData()) tgt.addData(convertConsentDataComponent(t)); - for (org.hl7.fhir.r4.model.Consent.provisionComponent t : p.getProvision()) + for (Consent.ProvisionComponent t : p.getProvision()) tgt.addExcept(convertExceptComponent(t)); } return tgt; @@ -369,7 +370,7 @@ public class Consent30_40 { return tgt; } - static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { + static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.dstu3.model.Consent.ExceptComponent tgt = new org.hl7.fhir.dstu3.model.Consent.ExceptComponent(); @@ -393,10 +394,10 @@ public class Consent30_40 { return tgt; } - static public org.hl7.fhir.r4.model.Consent.provisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { + static public Consent.ProvisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { if (src == null) return null; - org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + Consent.ProvisionComponent tgt = new Consent.ProvisionComponent(); ConversionContext30_40.INSTANCE.getVersionConvertor_30_40().copyBackboneElement(src,tgt); if (src.hasType()) tgt.setTypeElement(convertConsentExceptType(src.getTypeElement())); diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java index 0fe389de5..d5fa94f0f 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java @@ -10,6 +10,7 @@ import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Boolean40 import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.DateTime40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.special40_50.Reference40_50; import org.hl7.fhir.exceptions.FHIRException; +import org.hl7.fhir.r4.model.Consent; /* Copyright (c) 2011+, HL7, Inc. @@ -220,7 +221,7 @@ public class Consent40_50 { return tgt; } - public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { + public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.r5.model.Consent.ProvisionComponent tgt = new org.hl7.fhir.r5.model.Consent.ProvisionComponent(); @@ -242,15 +243,15 @@ public class Consent40_50 { tgt.setDataPeriod(Period40_50.convertPeriod(src.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : src.getData()) tgt.addData(convertprovisionDataComponent(t)); - for (org.hl7.fhir.r4.model.Consent.provisionComponent t : src.getProvision()) + for (Consent.ProvisionComponent t : src.getProvision()) tgt.addProvision(convertprovisionComponent(t)); return tgt; } - public static org.hl7.fhir.r4.model.Consent.provisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { + public static Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; - org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + Consent.ProvisionComponent tgt = new Consent.ProvisionComponent(); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt); // if (src.hasType()) // tgt.setTypeElement(convertConsentProvisionType(src.getTypeElement())); diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java index e09127adc..ee7a21d82 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java @@ -4917,7 +4917,7 @@ public class RdfParser extends RdfParserBase { } protected void composeConsentprovisionComponent(Complex parent, String parentType, String name, - Consent.provisionComponent element, int index) { + Consent.ProvisionComponent element, int index) { if (element == null) return; Complex t; diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java index 7ccf6fdd6..6c46487ea 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java @@ -6924,9 +6924,9 @@ public class XmlParser extends XmlParserBase { return true; } - protected Consent.provisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) + protected Consent.ProvisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) throws XmlPullParserException, IOException, FHIRFormatError { - Consent.provisionComponent res = new Consent.provisionComponent(); + Consent.ProvisionComponent res = new Consent.ProvisionComponent(); parseBackboneAttributes(xpp, res); next(xpp); int eventType = nextNoWhitespace(xpp); @@ -6941,7 +6941,7 @@ public class XmlParser extends XmlParserBase { } protected boolean parseConsentprovisionComponentContent(int eventType, XmlPullParser xpp, Consent owner, - Consent.provisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { + Consent.ProvisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("type")) { res.setTypeElement( parseEnumeration(xpp, Consent.ConsentProvisionType.NULL, new Consent.ConsentProvisionTypeEnumFactory())); @@ -34008,7 +34008,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponent(String name, Consent.provisionComponent element) throws IOException { + protected void composeConsentprovisionComponent(String name, Consent.ProvisionComponent element) throws IOException { if (element != null) { composeElementAttributes(element); xml.enter(FHIR_NS, name); @@ -34018,7 +34018,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponentElements(Consent.provisionComponent element) throws IOException { + protected void composeConsentprovisionComponentElements(Consent.ProvisionComponent element) throws IOException { composeBackboneElementElements(element); if (element.hasTypeElement()) composeEnumeration("type", element.getTypeElement(), new Consent.ConsentProvisionTypeEnumFactory()); @@ -34057,7 +34057,7 @@ public class XmlParser extends XmlParserBase { composeConsentprovisionDataComponent("data", e); } if (element.hasProvision()) { - for (Consent.provisionComponent e : element.getProvision()) + for (Consent.ProvisionComponent e : element.getProvision()) composeConsentprovisionComponent("provision", e); } } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java index c2abe1adf..8ddec6144 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java @@ -750,9 +750,9 @@ public class Consent extends DomainResource { } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("authority")) { this.authority = null; @@ -1111,9 +1111,9 @@ public class Consent extends DomainResource { } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("verified")) { this.verified = null; @@ -1215,7 +1215,7 @@ public class Consent extends DomainResource { } @Block() - public static class provisionComponent extends BackboneElement implements IBaseBackboneElement { + public static class ProvisionComponent extends BackboneElement implements IBaseBackboneElement { /** * Action to take - permit or deny - when the rule conditions are met. Not * permitted in root rule, required in all nested rules. @@ -1308,16 +1308,16 @@ public class Consent extends DomainResource { * Rules which provide exceptions to the base rule or subrules. */ @Child(name = "provision", type = { - provisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) + ProvisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) @Description(shortDefinition = "Nested Exception Rules", formalDefinition = "Rules which provide exceptions to the base rule or subrules.") - protected List provision; + protected List provision; private static final long serialVersionUID = -1280172451L; /** * Constructor */ - public provisionComponent() { + public ProvisionComponent() { super(); } @@ -1351,7 +1351,7 @@ public class Consent extends DomainResource { * extensions. The accessor "getType" gives direct access to the * value */ - public provisionComponent setTypeElement(Enumeration value) { + public ProvisionComponent setTypeElement(Enumeration value) { this.type = value; return this; } @@ -1368,7 +1368,7 @@ public class Consent extends DomainResource { * @param value Action to take - permit or deny - when the rule conditions are * met. Not permitted in root rule, required in all nested rules. */ - public provisionComponent setType(ConsentProvisionType value) { + public ProvisionComponent setType(ConsentProvisionType value) { if (value == null) this.type = null; else { @@ -1398,7 +1398,7 @@ public class Consent extends DomainResource { /** * @param value {@link #period} (The timeframe in this rule is valid.) */ - public provisionComponent setPeriod(Period value) { + public ProvisionComponent setPeriod(Period value) { this.period = value; return this; } @@ -1417,7 +1417,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setActor(List theActor) { + public ProvisionComponent setActor(List theActor) { this.actor = theActor; return this; } @@ -1439,7 +1439,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addActor(provisionActorComponent t) { // 3 + public ProvisionComponent addActor(provisionActorComponent t) { // 3 if (t == null) return this; if (this.actor == null) @@ -1471,7 +1471,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setAction(List theAction) { + public ProvisionComponent setAction(List theAction) { this.action = theAction; return this; } @@ -1493,7 +1493,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addAction(CodeableConcept t) { // 3 + public ProvisionComponent addAction(CodeableConcept t) { // 3 if (t == null) return this; if (this.action == null) @@ -1527,7 +1527,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setSecurityLabel(List theSecurityLabel) { + public ProvisionComponent setSecurityLabel(List theSecurityLabel) { this.securityLabel = theSecurityLabel; return this; } @@ -1549,7 +1549,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addSecurityLabel(Coding t) { // 3 + public ProvisionComponent addSecurityLabel(Coding t) { // 3 if (t == null) return this; if (this.securityLabel == null) @@ -1583,7 +1583,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setPurpose(List thePurpose) { + public ProvisionComponent setPurpose(List thePurpose) { this.purpose = thePurpose; return this; } @@ -1605,7 +1605,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addPurpose(Coding t) { // 3 + public ProvisionComponent addPurpose(Coding t) { // 3 if (t == null) return this; if (this.purpose == null) @@ -1640,7 +1640,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setClass_(List theClass_) { + public ProvisionComponent setClass_(List theClass_) { this.class_ = theClass_; return this; } @@ -1662,7 +1662,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addClass_(Coding t) { // 3 + public ProvisionComponent addClass_(Coding t) { // 3 if (t == null) return this; if (this.class_ == null) @@ -1695,7 +1695,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setCode(List theCode) { + public ProvisionComponent setCode(List theCode) { this.code = theCode; return this; } @@ -1717,7 +1717,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addCode(CodeableConcept t) { // 3 + public ProvisionComponent addCode(CodeableConcept t) { // 3 if (t == null) return this; if (this.code == null) @@ -1758,7 +1758,7 @@ public class Consent extends DomainResource { * @param value {@link #dataPeriod} (Clinical or Operational Relevant period of * time that bounds the data controlled by this rule.) */ - public provisionComponent setDataPeriod(Period value) { + public ProvisionComponent setDataPeriod(Period value) { this.dataPeriod = value; return this; } @@ -1776,7 +1776,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setData(List theData) { + public ProvisionComponent setData(List theData) { this.data = theData; return this; } @@ -1798,7 +1798,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addData(provisionDataComponent t) { // 3 + public ProvisionComponent addData(provisionDataComponent t) { // 3 if (t == null) return this; if (this.data == null) @@ -1822,16 +1822,16 @@ public class Consent extends DomainResource { * @return {@link #provision} (Rules which provide exceptions to the base rule * or subrules.) */ - public List getProvision() { + public List getProvision() { if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); return this.provision; } /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setProvision(List theProvision) { + public ProvisionComponent setProvision(List theProvision) { this.provision = theProvision; return this; } @@ -1839,25 +1839,25 @@ public class Consent extends DomainResource { public boolean hasProvision() { if (this.provision == null) return false; - for (provisionComponent item : this.provision) + for (ProvisionComponent item : this.provision) if (!item.isEmpty()) return true; return false; } - public provisionComponent addProvision() { // 3 - provisionComponent t = new provisionComponent(); + public ProvisionComponent addProvision() { // 3 + ProvisionComponent t = new ProvisionComponent(); if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return t; } - public provisionComponent addProvision(provisionComponent t) { // 3 + public ProvisionComponent addProvision(ProvisionComponent t) { // 3 if (t == null) return this; if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return this; } @@ -1866,7 +1866,7 @@ public class Consent extends DomainResource { * @return The first repetition of repeating field {@link #provision}, creating * it if it does not already exist */ - public provisionComponent getProvisionFirstRep() { + public ProvisionComponent getProvisionFirstRep() { if (getProvision().isEmpty()) { addProvision(); } @@ -2021,7 +2021,7 @@ public class Consent extends DomainResource { this.getData().add((provisionDataComponent) value); // provisionDataComponent return value; case -547120939: // provision - this.getProvision().add((provisionComponent) value); // provisionComponent + this.getProvision().add((ProvisionComponent) value); // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -2053,13 +2053,13 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().add((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().add((provisionComponent) value); + this.getProvision().add((ProvisionComponent) value); } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("type")) { this.type = null; @@ -2082,7 +2082,7 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().remove((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().remove((provisionComponent) value); + this.getProvision().remove((ProvisionComponent) value); } else super.removeChild(name, value); @@ -2180,13 +2180,13 @@ public class Consent extends DomainResource { return super.addChild(name); } - public provisionComponent copy() { - provisionComponent dst = new provisionComponent(); + public ProvisionComponent copy() { + ProvisionComponent dst = new ProvisionComponent(); copyValues(dst); return dst; } - public void copyValues(provisionComponent dst) { + public void copyValues(ProvisionComponent dst) { super.copyValues(dst); dst.type = type == null ? null : type.copy(); dst.period = period == null ? null : period.copy(); @@ -2234,8 +2234,8 @@ public class Consent extends DomainResource { } ; if (provision != null) { - dst.provision = new ArrayList(); - for (provisionComponent i : provision) + dst.provision = new ArrayList(); + for (ProvisionComponent i : provision) dst.provision.add(i.copy()); } ; @@ -2245,9 +2245,9 @@ public class Consent extends DomainResource { public boolean equalsDeep(Base other_) { if (!super.equalsDeep(other_)) return false; - if (!(other_ instanceof provisionComponent)) + if (!(other_ instanceof ProvisionComponent)) return false; - provisionComponent o = (provisionComponent) other_; + ProvisionComponent o = (ProvisionComponent) other_; return compareDeep(type, o.type, true) && compareDeep(period, o.period, true) && compareDeep(actor, o.actor, true) && compareDeep(action, o.action, true) && compareDeep(securityLabel, o.securityLabel, true) && compareDeep(purpose, o.purpose, true) && compareDeep(class_, o.class_, true) @@ -2259,9 +2259,9 @@ public class Consent extends DomainResource { public boolean equalsShallow(Base other_) { if (!super.equalsShallow(other_)) return false; - if (!(other_ instanceof provisionComponent)) + if (!(other_ instanceof ProvisionComponent)) return false; - provisionComponent o = (provisionComponent) other_; + ProvisionComponent o = (ProvisionComponent) other_; return compareValues(type, o.type, true); } @@ -2468,9 +2468,9 @@ public class Consent extends DomainResource { } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("role")) { this.role = null; @@ -2771,9 +2771,9 @@ public class Consent extends DomainResource { } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("meaning")) { this.meaning = null; @@ -2996,7 +2996,7 @@ public class Consent extends DomainResource { */ @Child(name = "provision", type = {}, order = 12, min = 0, max = 1, modifier = false, summary = true) @Description(shortDefinition = "Constraints to the base Consent.policyRule", formalDefinition = "An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.") - protected provisionComponent provision; + protected ProvisionComponent provision; private static final long serialVersionUID = 206528051L; @@ -3663,12 +3663,12 @@ public class Consent extends DomainResource { * @return {@link #provision} (An exception to the base policy of this consent. * An exception can be an addition or removal of access permissions.) */ - public provisionComponent getProvision() { + public ProvisionComponent getProvision() { if (this.provision == null) if (Configuration.errorOnAutoCreate()) throw new Error("Attempt to auto-create Consent.provision"); else if (Configuration.doAutoCreate()) - this.provision = new provisionComponent(); // cc + this.provision = new ProvisionComponent(); // cc return this.provision; } @@ -3681,7 +3681,7 @@ public class Consent extends DomainResource { * consent. An exception can be an addition or removal of access * permissions.) */ - public Consent setProvision(provisionComponent value) { + public Consent setProvision(ProvisionComponent value) { this.provision = value; return this; } @@ -3877,7 +3877,7 @@ public class Consent extends DomainResource { this.getVerification().add((ConsentVerificationComponent) value); // ConsentVerificationComponent return value; case -547120939: // provision - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -3913,13 +3913,13 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().add((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("identifier")) { this.getIdentifier().remove(castToIdentifier(value)); @@ -3946,7 +3946,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().remove((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent } else super.removeChild(name, value); @@ -4058,7 +4058,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { return addVerification(); } else if (name.equals("provision")) { - this.provision = new provisionComponent(); + this.provision = new ProvisionComponent(); return this.provision; } else return super.addChild(name); From 975653e07dc8577ef81d39c79829ff9b0c96c382 Mon Sep 17 00:00:00 2001 From: Lloyd McKenzie Date: Thu, 29 Aug 2024 21:17:20 -0600 Subject: [PATCH 02/68] Added support for tracking whether elements are ellipsed and for rendering XHTML versions of XML and JSON content with ellipsed elements --- .../org/hl7/fhir/r5/elementmodel/Element.java | 10 + .../hl7/fhir/r5/elementmodel/JsonParser.java | 77 ++- .../hl7/fhir/r5/elementmodel/XmlParser.java | 187 ++++--- .../org/hl7/fhir/r5/formats/JsonCreator.java | 91 ++-- .../fhir/r5/formats/JsonCreatorCanonical.java | 514 +++++++++--------- .../fhir/r5/formats/JsonCreatorDirect.java | 439 +++++++-------- .../hl7/fhir/r5/formats/JsonCreatorGson.java | 207 +++---- 7 files changed, 830 insertions(+), 695 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java index c6254b682..1aaecc1c9 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java @@ -162,6 +162,7 @@ public class Element extends Base implements NamedItem { private FhirFormat format; private Object nativeObject; private List sliceDefinitions; + private boolean ellipsed; public Element(String name) { super(); @@ -1429,6 +1430,8 @@ public class Element extends Base implements NamedItem { public Base copy() { Element element = new Element(this); this.copyValues(element); + if (this.isEllipsed()) + element.setEllipsed(true); return element; } @@ -1638,4 +1641,11 @@ public class Element extends Base implements NamedItem { return FhirPublication.fromCode(property.getStructure().getVersion()); } + public void setEllipsed(boolean ellipsed) { + this.ellipsed = ellipsed; + } + + public boolean isEllipsed() { + return this.ellipsed; + } } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java index a11c0c9f1..f8f77e387 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java @@ -62,6 +62,7 @@ import org.hl7.fhir.r5.formats.JsonCreatorDirect; import org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent; import org.hl7.fhir.r5.model.ElementDefinition; import org.hl7.fhir.r5.model.StructureDefinition; +import org.hl7.fhir.r5.utils.ToolingExtensions; import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; import org.hl7.fhir.utilities.StringPair; import org.hl7.fhir.utilities.TextFile; @@ -85,6 +86,8 @@ public class JsonParser extends ParserBase { private JsonCreator json; private boolean allowComments; + private boolean ellipseElements; + private boolean suppressResourceType; private Element baseElement; private boolean markedXhtml; @@ -782,7 +785,8 @@ public class JsonParser extends ParserBase { } checkComposeComments(e); json.beginObject(); - prop("resourceType", e.getType(), null); + if (!isSuppressResourceType()) + prop("resourceType", e.getType(), null); Set done = new HashSet(); for (Element child : e.getChildren()) { compose(e.getName(), e, done, child); @@ -807,7 +811,8 @@ public class JsonParser extends ParserBase { checkComposeComments(e); json.beginObject(); - prop("resourceType", e.getType(), linkResolver == null ? null : linkResolver.resolveProperty(e.getProperty())); + if (!isSuppressResourceType()) + prop("resourceType", e.getType(), linkResolver == null ? null : linkResolver.resolveProperty(e.getProperty())); Set done = new HashSet(); for (Element child : e.getChildren()) { compose(e.getName(), e, done, child); @@ -821,15 +826,50 @@ public class JsonParser extends ParserBase { if (wantCompose(path, child)) { boolean isList = child.hasElementProperty() ? child.getElementProperty().isList() : child.getProperty().isList(); if (!isList) {// for specials, ignore the cardinality of the stated type - compose(path, child); + if (child.isEllipsed() && ellipseElements) + json.ellipse(); + else + compose(path, child); } else if (!done.contains(child.getName())) { done.add(child.getName()); List list = e.getChildrenByName(child.getName()); - composeList(path, list); + if (child.getProperty().getDefinition().hasExtension(ToolingExtensions.EXT_JSON_PROP_KEY)) + composeKeyList(path, list); + else + composeList(path, list); } } } + private void composeKeyList(String path, List list) throws IOException { + String keyName = list.get(0).getProperty().getDefinition().getExtensionString(ToolingExtensions.EXT_JSON_PROP_KEY); + json.name(list.get(0).getName()); + json.beginObject(); + for (Element e: list) { + Element key = null; + Element value = null; + for (Element child: e.getChildren()) { + if (child.getName().equals(keyName)) + key = child; + else + value = child; + } + if (value.isPrimitive()) + primitiveValue(key.getValue(), value); + else { + json.name(key.getValue()); + checkComposeComments(e); + json.beginObject(); + Set done = new HashSet(); + for (Element child : value.getChildren()) { + compose(value.getName(), value, done, child); + } + json.endObject(); + compose(path + "." + key.getValue(), value); + } + } + json.endObject(); + } private void composeList(String path, List list) throws IOException { // there will be at least one element @@ -847,7 +887,9 @@ public class JsonParser extends ParserBase { if (prim) { openArray(name, linkResolver == null ? null : linkResolver.resolveProperty(list.get(0).getProperty())); for (Element item : list) { - if (item.hasValue()) { + if (item.isEllipsed()) + json.ellipse(); + else if (item.hasValue()) { if (linkResolver != null && item.getProperty().isReference()) { String ref = linkResolver.resolveReference(getReferenceForElement(item)); if (ref != null) { @@ -866,7 +908,9 @@ public class JsonParser extends ParserBase { openArray(name, linkResolver == null ? null : linkResolver.resolveProperty(list.get(0).getProperty())); int i = 0; for (Element item : list) { - if (item.hasChildren()) { + if (item.isEllipsed()) + json.ellipse(); + else if (item.hasChildren()) { open(null,null); if (item.getProperty().isResource()) { prop("resourceType", item.getType(), linkResolver == null ? null : linkResolver.resolveType(item.getType())); @@ -933,9 +977,10 @@ public class JsonParser extends ParserBase { json.externalLink(ref); } } + Set done = new HashSet(); for (Element child : element.getChildren()) { - compose(path+"."+element.getName(), element, done, child); + compose(path + "." + element.getName(), element, done, child); } close(); } @@ -951,5 +996,23 @@ public class JsonParser extends ParserBase { return this; } + public boolean isEllipseElements() { + return ellipseElements; + } + + public JsonParser setEllipseElements(boolean ellipseElements) { + this.ellipseElements = ellipseElements; + return this; + } + + public boolean isSuppressResourceType() { + return suppressResourceType; + } + + public JsonParser setSuppressResourceType(boolean suppressResourceType) { + this.suppressResourceType = suppressResourceType; + return this; + } + } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java index adf06a789..ce65e2a0c 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java @@ -94,6 +94,7 @@ import org.xml.sax.XMLReader; public class XmlParser extends ParserBase { private boolean allowXsiLocation; private String version; + private boolean ellipseElements; public XmlParser(IWorkerContext context) { super(context); @@ -805,92 +806,125 @@ public class XmlParser extends ParserBase { } private void composeElement(IXMLWriter xml, Element element, String elementName, boolean root) throws IOException, FHIRException { - if (showDecorations) { - @SuppressWarnings("unchecked") - List decorations = (List) element.getUserData("fhir.decorations"); - if (decorations != null) - for (ElementDecoration d : decorations) - xml.decorate(d); - } - for (String s : element.getComments()) { - xml.comment(s, true); + if (!(isEllipseElements() && element.isEllipsed())) { + if (showDecorations) { + @SuppressWarnings("unchecked") + List decorations = (List) element.getUserData("fhir.decorations"); + if (decorations != null) + for (ElementDecoration d : decorations) + xml.decorate(d); + } + for (String s : element.getComments()) { + xml.comment(s, true); + } } if (isText(element.getProperty())) { - if (linkResolver != null) - xml.link(linkResolver.resolveProperty(element.getProperty())); - xml.enter(element.getProperty().getXmlNamespace(),elementName); - if (linkResolver != null && element.getProperty().isReference()) { - String ref = linkResolver.resolveReference(getReferenceForElement(element)); - if (ref != null) { - xml.externalLink(ref); + if (isEllipseElements() && element.isEllipsed()) + xml.ellipse(); + else { + if (linkResolver != null) + xml.link(linkResolver.resolveProperty(element.getProperty())); + xml.enter(element.getProperty().getXmlNamespace(),elementName); + if (linkResolver != null && element.getProperty().isReference()) { + String ref = linkResolver.resolveReference(getReferenceForElement(element)); + if (ref != null) { + xml.externalLink(ref); + } } + xml.text(element.getValue()); + xml.exit(element.getProperty().getXmlNamespace(),elementName); } - xml.text(element.getValue()); - xml.exit(element.getProperty().getXmlNamespace(),elementName); } else if (!element.hasChildren() && !element.hasValue()) { - if (element.getExplicitType() != null) - xml.attribute("xsi:type", element.getExplicitType()); - xml.element(elementName); + if (isEllipseElements() && element.isEllipsed()) + xml.ellipse(); + else { + if (element.getExplicitType() != null) + xml.attribute("xsi:type", element.getExplicitType()); + xml.element(elementName); + } } else if (element.isPrimitive() || (element.hasType() && isPrimitive(element.getType()))) { if (element.getType().equals("xhtml")) { - String rawXhtml = element.getValue(); - if (isCdaText(element.getProperty())) { - new CDANarrativeFormat().convert(xml, new XhtmlParser().parseFragment(rawXhtml)); - } else { - xml.escapedText(rawXhtml); - if (!markedXhtml) { - xml.anchor("end-xhtml"); - markedXhtml = true; + if (isEllipseElements() && element.isEllipsed()) + xml.ellipse(); + else { + String rawXhtml = element.getValue(); + if (isCdaText(element.getProperty())) { + new CDANarrativeFormat().convert(xml, new XhtmlParser().parseFragment(rawXhtml)); + } else { + xml.escapedText(rawXhtml); + if (!markedXhtml) { + xml.anchor("end-xhtml"); + markedXhtml = true; + } } } } else if (isText(element.getProperty())) { - if (linkResolver != null) - xml.link(linkResolver.resolveProperty(element.getProperty())); - xml.text(element.getValue()); - } else { - setXsiTypeIfIsTypeAttr(xml, element); - if (element.hasValue()) { + if (isEllipseElements() && element.isEllipsed()) + xml.ellipse(); + else { if (linkResolver != null) - xml.link(linkResolver.resolveType(element.getType())); - xml.attribute("value", element.getValue()); + xml.link(linkResolver.resolveProperty(element.getProperty())); + xml.text(element.getValue()); } - if (linkResolver != null) - xml.link(linkResolver.resolveProperty(element.getProperty())); - if (element.hasChildren()) { - xml.enter(element.getProperty().getXmlNamespace(), elementName); - if (linkResolver != null && element.getProperty().isReference()) { - String ref = linkResolver.resolveReference(getReferenceForElement(element)); - if (ref != null) { - xml.externalLink(ref); - } + } else { + if (isEllipseElements() && element.isEllipsed()) + xml.attributeEllipse(); + else { + setXsiTypeIfIsTypeAttr(xml, element); + if (element.hasValue()) { + if (linkResolver != null) + xml.link(linkResolver.resolveType(element.getType())); + xml.attribute("value", element.getValue()); } - for (Element child : element.getChildren()) - composeElement(xml, child, child.getName(), false); - xml.exit(element.getProperty().getXmlNamespace(),elementName); - } else - xml.element(elementName); + if (linkResolver != null) + xml.link(linkResolver.resolveProperty(element.getProperty())); + if (element.hasChildren()) { + xml.enter(element.getProperty().getXmlNamespace(), elementName); + if (linkResolver != null && element.getProperty().isReference()) { + String ref = linkResolver.resolveReference(getReferenceForElement(element)); + if (ref != null) { + xml.externalLink(ref); + } + } + for (Element child : element.getChildren()) + composeElement(xml, child, child.getName(), false); + xml.exit(element.getProperty().getXmlNamespace(),elementName); + } else + xml.element(elementName); + } } } else { - setXsiTypeIfIsTypeAttr(xml, element); - Set handled = new HashSet<>(); + if (isEllipseElements() && element.isEllipsed()) + xml.ellipse(); + else { + setXsiTypeIfIsTypeAttr(xml, element); + Set handled = new HashSet<>(); for (Element child : element.getChildren()) { if (!handled.contains(child.getName()) && isAttr(child.getProperty()) && wantCompose(element.getPath(), child)) { handled.add(child.getName()); - String av = child.getValue(); - if (child.getProperty().isList()) { - for (Element c2 : element.getChildren()) { - if (c2 != child && c2.getName().equals(child.getName())) { - av = av + " "+c2.getValue(); + if (isEllipseElements() && child.isEllipsed()) + xml.attributeEllipse(); + else { + String av = child.getValue(); + if (child.getProperty().isList()) { + for (Element c2 : element.getChildren()) { + if (c2 != child && c2.getName().equals(child.getName())) { + if (c2.isEllipsed()) + av = av + " ..."; + else + av = av + " " + c2.getValue(); + } } - } + } + if (linkResolver != null) + xml.link(linkResolver.resolveType(child.getType())); + if (ToolingExtensions.hasExtension(child.getProperty().getDefinition(), ToolingExtensions.EXT_DATE_FORMAT)) + av = convertForDateFormatToExternal(ToolingExtensions.readStringExtension(child.getProperty().getDefinition(), ToolingExtensions.EXT_DATE_FORMAT), av); + xml.attribute(child.getProperty().getXmlNamespace(), child.getProperty().getXmlName(), av); } - if (linkResolver != null) - xml.link(linkResolver.resolveType(child.getType())); - if (ToolingExtensions.hasExtension(child.getProperty().getDefinition(), ToolingExtensions.EXT_DATE_FORMAT)) - av = convertForDateFormatToExternal(ToolingExtensions.readStringExtension(child.getProperty().getDefinition(), ToolingExtensions.EXT_DATE_FORMAT), av); - xml.attribute(child.getProperty().getXmlNamespace(),child.getProperty().getXmlName(), av); } } + } if (!element.getProperty().getDefinition().hasExtension(ToolingExtensions.EXT_ID_CHOICE_GROUP)) { if (linkResolver != null) xml.link(linkResolver.resolveProperty(element.getProperty())); @@ -914,12 +948,16 @@ public class XmlParser extends ParserBase { } for (Element child : element.getChildren()) { if (wantCompose(element.getPath(), child)) { - if (isText(child.getProperty())) { - if (linkResolver != null) - xml.link(linkResolver.resolveProperty(element.getProperty())); - xml.text(child.getValue()); - } else if (!isAttr(child.getProperty())) { - composeElement(xml, child, child.getName(), false); + if (isEllipseElements() && child.isEllipsed()) + xml.ellipse(); + else { + if (isText(child.getProperty())) { + if (linkResolver != null) + xml.link(linkResolver.resolveProperty(element.getProperty())); + xml.text(child.getValue()); + } else if (!isAttr(child.getProperty())) { + composeElement(xml, child, child.getName(), false); + } } } } @@ -1034,4 +1072,13 @@ public class XmlParser extends ParserBase { // do nothing } } + + public boolean isEllipseElements() { + return ellipseElements; + } + + public void setEllipseElements(boolean ellipseElements) { + this.ellipseElements = ellipseElements; + } + } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java index 0d4b0cf27..58f44d505 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java @@ -1,5 +1,5 @@ -package org.hl7.fhir.r5.formats; - +package org.hl7.fhir.r5.formats; + /* Copyright (c) 2011+, HL7, Inc. All rights reserved. @@ -28,47 +28,48 @@ package org.hl7.fhir.r5.formats; POSSIBILITY OF SUCH DAMAGE. */ - - - -import java.io.IOException; -import java.math.BigDecimal; - -/** - * Facade to GSON writer, or something that imposes property ordering first - * - * @author Grahame - * - */ -public interface JsonCreator { - - void comment(String comment); - - void beginObject() throws IOException; - - void endObject() throws IOException; - - void nullValue() throws IOException; - - void name(String name) throws IOException; - - void value(String value) throws IOException; - - void value(Boolean value) throws IOException; - - void value(BigDecimal value) throws IOException; - void valueNum(String value) throws IOException; // allow full control of representation - - void value(Integer value) throws IOException; - - void beginArray() throws IOException; - - void endArray() throws IOException; - - void finish() throws IOException; - - // only used by an creator that actually produces xhtml - void link(String href); - void anchor(String string); - void externalLink(String string); + + + +import java.io.IOException; +import java.math.BigDecimal; + +/** + * Facade to GSON writer, or something that imposes property ordering first + * + * @author Grahame + * + */ +public interface JsonCreator { + + void comment(String comment); + + void beginObject() throws IOException; + + void endObject() throws IOException; + + void nullValue() throws IOException; + + void name(String name) throws IOException; + + void value(String value) throws IOException; + + void value(Boolean value) throws IOException; + + void value(BigDecimal value) throws IOException; + void valueNum(String value) throws IOException; // allow full control of representation + + void value(Integer value) throws IOException; + + void beginArray() throws IOException; + + void endArray() throws IOException; + + void finish() throws IOException; + + // only used by an creator that actually produces xhtml + void link(String href); + void anchor(String string); + void externalLink(String string); + void ellipse(); } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java index 66acfeff6..badb9a4a0 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java @@ -1,5 +1,5 @@ -package org.hl7.fhir.r5.formats; - +package org.hl7.fhir.r5.formats; + /* Copyright (c) 2011+, HL7, Inc. All rights reserved. @@ -28,257 +28,261 @@ package org.hl7.fhir.r5.formats; POSSIBILITY OF SUCH DAMAGE. */ - - - -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Stack; - -public class JsonCreatorCanonical implements JsonCreator { - - public class JsonCanValue { - String name; - private JsonCanValue(String name) { - this.name = name; - } - } - - private class JsonCanNumberValue extends JsonCanValue { - private BigDecimal value; - private JsonCanNumberValue(String name, BigDecimal value) { - super(name); - this.value = value; - } - } - - private class JsonCanPresentedNumberValue extends JsonCanValue { - private String value; - private JsonCanPresentedNumberValue(String name, String value) { - super(name); - this.value = value; - } - } - - private class JsonCanIntegerValue extends JsonCanValue { - private Integer value; - private JsonCanIntegerValue(String name, Integer value) { - super(name); - this.value = value; - } - } - - private class JsonCanBooleanValue extends JsonCanValue { - private Boolean value; - private JsonCanBooleanValue(String name, Boolean value) { - super(name); - this.value = value; - } - } - - private class JsonCanStringValue extends JsonCanValue { - private String value; - private JsonCanStringValue(String name, String value) { - super(name); - this.value = value; - } - } - - private class JsonCanNullValue extends JsonCanValue { - private JsonCanNullValue(String name) { - super(name); - } - } - - public class JsonCanObject extends JsonCanValue { - - boolean array; - List children = new ArrayList(); - - public JsonCanObject(String name, boolean array) { - super(name); - this.array = array; - } - - public void addProp(JsonCanValue obj) { - children.add(obj); - } - } - - Stack stack; - JsonCanObject root; - JsonCreatorDirect jj; - String name; - - public JsonCreatorCanonical(OutputStreamWriter osw) { - stack = new Stack(); - jj = new JsonCreatorDirect(osw, false, false); - name = null; - } - - private String takeName() { - String res = name; - name = null; - return res; - } - - @Override - public void beginObject() throws IOException { - JsonCanObject obj = new JsonCanObject(takeName(), false); - if (stack.isEmpty()) - root = obj; - else - stack.peek().addProp(obj); - stack.push(obj); - } - - @Override - public void endObject() throws IOException { - stack.pop(); - } - - @Override - public void nullValue() throws IOException { - stack.peek().addProp(new JsonCanNullValue(takeName())); - } - - @Override - public void name(String name) throws IOException { - this.name = name; - } - - @Override - public void value(String value) throws IOException { - stack.peek().addProp(new JsonCanStringValue(takeName(), value)); - } - - @Override - public void value(Boolean value) throws IOException { - stack.peek().addProp(new JsonCanBooleanValue(takeName(), value)); - } - - @Override - public void value(BigDecimal value) throws IOException { - stack.peek().addProp(new JsonCanNumberValue(takeName(), value)); - } - @Override - public void valueNum(String value) throws IOException { - stack.peek().addProp(new JsonCanPresentedNumberValue(takeName(), value)); - } - - - @Override - public void value(Integer value) throws IOException { - stack.peek().addProp(new JsonCanIntegerValue(takeName(), value)); - } - - @Override - public void beginArray() throws IOException { - JsonCanObject obj = new JsonCanObject(takeName(), true); - if (!stack.isEmpty()) - stack.peek().addProp(obj); - stack.push(obj); - - } - - @Override - public void endArray() throws IOException { - stack.pop(); - } - - @Override - public void finish() throws IOException { - writeObject(root); - } - - private void writeObject(JsonCanObject obj) throws IOException { - jj.beginObject(); - List names = new ArrayList(); - for (JsonCanValue v : obj.children) - names.add(v.name); - Collections.sort(names); - for (String n : names) { - jj.name(n); - JsonCanValue v = getPropForName(n, obj.children); - if (v instanceof JsonCanNumberValue) - jj.value(((JsonCanNumberValue) v).value); - else if (v instanceof JsonCanPresentedNumberValue) - jj.valueNum(((JsonCanPresentedNumberValue) v).value); - else if (v instanceof JsonCanIntegerValue) - jj.value(((JsonCanIntegerValue) v).value); - else if (v instanceof JsonCanBooleanValue) - jj.value(((JsonCanBooleanValue) v).value); - else if (v instanceof JsonCanStringValue) - jj.value(((JsonCanStringValue) v).value); - else if (v instanceof JsonCanNullValue) - jj.nullValue(); - else if (v instanceof JsonCanObject) { - JsonCanObject o = (JsonCanObject) v; - if (o.array) - writeArray(o); - else - writeObject(o); - } else - throw new Error("not possible"); - } - jj.endObject(); - } - - private JsonCanValue getPropForName(String name, List children) { - for (JsonCanValue child : children) - if (child.name.equals(name)) - return child; - return null; - } - - private void writeArray(JsonCanObject arr) throws IOException { - jj.beginArray(); - for (JsonCanValue v : arr.children) { - if (v instanceof JsonCanNumberValue) - jj.value(((JsonCanNumberValue) v).value); - else if (v instanceof JsonCanIntegerValue) - jj.value(((JsonCanIntegerValue) v).value); - else if (v instanceof JsonCanBooleanValue) - jj.value(((JsonCanBooleanValue) v).value); - else if (v instanceof JsonCanStringValue) - jj.value(((JsonCanStringValue) v).value); - else if (v instanceof JsonCanNullValue) - jj.nullValue(); - else if (v instanceof JsonCanObject) { - JsonCanObject o = (JsonCanObject) v; - if (o.array) - writeArray(o); - else - writeObject(o); - } else - throw new Error("not possible"); - } - jj.endArray(); - } - - @Override - public void comment(String content) { - // canonical JSON ignores comments - } - - @Override - public void link(String href) { - // not used - } - - @Override - public void anchor(String name) { - // not used - } - - @Override - public void externalLink(String string) { - // not used - } - - + + + +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Stack; + +public class JsonCreatorCanonical implements JsonCreator { + + public class JsonCanValue { + String name; + private JsonCanValue(String name) { + this.name = name; + } + } + + private class JsonCanNumberValue extends JsonCanValue { + private BigDecimal value; + private JsonCanNumberValue(String name, BigDecimal value) { + super(name); + this.value = value; + } + } + + private class JsonCanPresentedNumberValue extends JsonCanValue { + private String value; + private JsonCanPresentedNumberValue(String name, String value) { + super(name); + this.value = value; + } + } + + private class JsonCanIntegerValue extends JsonCanValue { + private Integer value; + private JsonCanIntegerValue(String name, Integer value) { + super(name); + this.value = value; + } + } + + private class JsonCanBooleanValue extends JsonCanValue { + private Boolean value; + private JsonCanBooleanValue(String name, Boolean value) { + super(name); + this.value = value; + } + } + + private class JsonCanStringValue extends JsonCanValue { + private String value; + private JsonCanStringValue(String name, String value) { + super(name); + this.value = value; + } + } + + private class JsonCanNullValue extends JsonCanValue { + private JsonCanNullValue(String name) { + super(name); + } + } + + public class JsonCanObject extends JsonCanValue { + + boolean array; + List children = new ArrayList(); + + public JsonCanObject(String name, boolean array) { + super(name); + this.array = array; + } + + public void addProp(JsonCanValue obj) { + children.add(obj); + } + } + + Stack stack; + JsonCanObject root; + JsonCreatorDirect jj; + String name; + + public JsonCreatorCanonical(OutputStreamWriter osw) { + stack = new Stack(); + jj = new JsonCreatorDirect(osw, false, false); + name = null; + } + + private String takeName() { + String res = name; + name = null; + return res; + } + + @Override + public void beginObject() throws IOException { + JsonCanObject obj = new JsonCanObject(takeName(), false); + if (stack.isEmpty()) + root = obj; + else + stack.peek().addProp(obj); + stack.push(obj); + } + + @Override + public void endObject() throws IOException { + stack.pop(); + } + + @Override + public void nullValue() throws IOException { + stack.peek().addProp(new JsonCanNullValue(takeName())); + } + + @Override + public void name(String name) throws IOException { + this.name = name; + } + + @Override + public void value(String value) throws IOException { + stack.peek().addProp(new JsonCanStringValue(takeName(), value)); + } + + @Override + public void value(Boolean value) throws IOException { + stack.peek().addProp(new JsonCanBooleanValue(takeName(), value)); + } + + @Override + public void value(BigDecimal value) throws IOException { + stack.peek().addProp(new JsonCanNumberValue(takeName(), value)); + } + @Override + public void valueNum(String value) throws IOException { + stack.peek().addProp(new JsonCanPresentedNumberValue(takeName(), value)); + } + + + @Override + public void value(Integer value) throws IOException { + stack.peek().addProp(new JsonCanIntegerValue(takeName(), value)); + } + + @Override + public void beginArray() throws IOException { + JsonCanObject obj = new JsonCanObject(takeName(), true); + if (!stack.isEmpty()) + stack.peek().addProp(obj); + stack.push(obj); + + } + + @Override + public void endArray() throws IOException { + stack.pop(); + } + + @Override + public void finish() throws IOException { + writeObject(root); + } + + private void writeObject(JsonCanObject obj) throws IOException { + jj.beginObject(); + List names = new ArrayList(); + for (JsonCanValue v : obj.children) + names.add(v.name); + Collections.sort(names); + for (String n : names) { + jj.name(n); + JsonCanValue v = getPropForName(n, obj.children); + if (v instanceof JsonCanNumberValue) + jj.value(((JsonCanNumberValue) v).value); + else if (v instanceof JsonCanPresentedNumberValue) + jj.valueNum(((JsonCanPresentedNumberValue) v).value); + else if (v instanceof JsonCanIntegerValue) + jj.value(((JsonCanIntegerValue) v).value); + else if (v instanceof JsonCanBooleanValue) + jj.value(((JsonCanBooleanValue) v).value); + else if (v instanceof JsonCanStringValue) + jj.value(((JsonCanStringValue) v).value); + else if (v instanceof JsonCanNullValue) + jj.nullValue(); + else if (v instanceof JsonCanObject) { + JsonCanObject o = (JsonCanObject) v; + if (o.array) + writeArray(o); + else + writeObject(o); + } else + throw new Error("not possible"); + } + jj.endObject(); + } + + private JsonCanValue getPropForName(String name, List children) { + for (JsonCanValue child : children) + if (child.name.equals(name)) + return child; + return null; + } + + private void writeArray(JsonCanObject arr) throws IOException { + jj.beginArray(); + for (JsonCanValue v : arr.children) { + if (v instanceof JsonCanNumberValue) + jj.value(((JsonCanNumberValue) v).value); + else if (v instanceof JsonCanIntegerValue) + jj.value(((JsonCanIntegerValue) v).value); + else if (v instanceof JsonCanBooleanValue) + jj.value(((JsonCanBooleanValue) v).value); + else if (v instanceof JsonCanStringValue) + jj.value(((JsonCanStringValue) v).value); + else if (v instanceof JsonCanNullValue) + jj.nullValue(); + else if (v instanceof JsonCanObject) { + JsonCanObject o = (JsonCanObject) v; + if (o.array) + writeArray(o); + else + writeObject(o); + } else + throw new Error("not possible"); + } + jj.endArray(); + } + + @Override + public void comment(String content) { + // canonical JSON ignores comments + } + + @Override + public void link(String href) { + // not used + } + + @Override + public void anchor(String name) { + // not used + } + + @Override + public void externalLink(String string) { + // not used + } + + @Override + public void ellipse() { + // not used + } + } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java index 019f505e3..5132099f3 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java @@ -1,5 +1,5 @@ -package org.hl7.fhir.r5.formats; - +package org.hl7.fhir.r5.formats; + /* Copyright (c) 2011+, HL7, Inc. All rights reserved. @@ -28,219 +28,224 @@ package org.hl7.fhir.r5.formats; POSSIBILITY OF SUCH DAMAGE. */ - - - -import java.io.IOException; -import java.io.Writer; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; - -import org.hl7.fhir.utilities.Utilities; - -/** - * A little implementation of a json write to replace Gson .... because Gson screws up decimal values, and *we care* - * - * @author Grahame Grieve - * - */ -public class JsonCreatorDirect implements JsonCreator { - - private Writer writer; - private boolean pretty; - private boolean comments; - private boolean named; - private List valued = new ArrayList(); - private int indent; - private List commentList = new ArrayList<>(); - - public JsonCreatorDirect(Writer writer, boolean pretty, boolean comments) { - super(); - this.writer = writer; - this.pretty = pretty; - this.comments = pretty && comments; - } - - @Override - public void comment(String content) { - if (comments) { - commentList.add(content); - } - } - - @Override - public void beginObject() throws IOException { - checkState(); - writer.write("{"); - stepIn(); - if (!valued.isEmpty()) { - valued.set(0, true); - } - valued.add(0, false); - } - - private void commitComments() throws IOException { - if (comments) { - for (String s : commentList) { - writer.write("// "); - writer.write(s); - writer.write("\r\n"); - for (int i = 0; i < indent; i++) { - writer.write(" "); - } - } - commentList.clear(); - } - } - - - public void stepIn() throws IOException { - if (pretty) { - indent++; - writer.write("\r\n"); - for (int i = 0; i < indent; i++) { - writer.write(" "); - } - } - } - - public void stepOut() throws IOException { - if (pretty) { - indent--; - writer.write("\r\n"); - for (int i = 0; i < indent; i++) { - writer.write(" "); - } - } - } - - private void checkState() throws IOException { - commitComments(); - if (named) { - if (pretty) - writer.write(" : "); - else - writer.write(":"); - named = false; - } - if (!valued.isEmpty() && valued.get(0)) { - writer.write(","); - if (pretty) { - writer.write("\r\n"); - for (int i = 0; i < indent; i++) { - writer.write(" "); - } - } - valued.set(0, false); - } - } - - @Override - public void endObject() throws IOException { - stepOut(); - writer.write("}"); - valued.remove(0); - } - - @Override - public void nullValue() throws IOException { - checkState(); - writer.write("null"); - valued.set(0, true); - } - - @Override - public void name(String name) throws IOException { - checkState(); - writer.write("\""+name+"\""); - named = true; - } - - @Override - public void value(String value) throws IOException { - checkState(); - writer.write("\""+Utilities.escapeJson(value)+"\""); - valued.set(0, true); - } - - @Override - public void value(Boolean value) throws IOException { - checkState(); - if (value == null) - writer.write("null"); - else if (value.booleanValue()) - writer.write("true"); - else - writer.write("false"); - valued.set(0, true); - } - - @Override - public void value(BigDecimal value) throws IOException { - checkState(); - if (value == null) - writer.write("null"); - else - writer.write(value.toString()); - valued.set(0, true); - } - - @Override - public void valueNum(String value) throws IOException { - checkState(); - if (value == null) - writer.write("null"); - else - writer.write(value); - valued.set(0, true); - } - - @Override - public void value(Integer value) throws IOException { - checkState(); - if (value == null) - writer.write("null"); - else - writer.write(value.toString()); - valued.set(0, true); - } - - @Override - public void beginArray() throws IOException { - checkState(); - writer.write("["); - if (!valued.isEmpty()) { - valued.set(0, true); - } - valued.add(0, false); - } - - @Override - public void endArray() throws IOException { - writer.write("]"); - valued.remove(0); - } - - @Override - public void finish() throws IOException { - writer.flush(); - } - - @Override - public void link(String href) { - // not used - - } - - @Override - public void anchor(String name) { - // not used - } - - - @Override - public void externalLink(String string) { - // not used - } + + + +import java.io.IOException; +import java.io.Writer; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import org.hl7.fhir.utilities.Utilities; + +/** + * A little implementation of a json write to replace Gson .... because Gson screws up decimal values, and *we care* + * + * @author Grahame Grieve + * + */ +public class JsonCreatorDirect implements JsonCreator { + + private Writer writer; + private boolean pretty; + private boolean comments; + private boolean named; + private List valued = new ArrayList(); + private int indent; + private List commentList = new ArrayList<>(); + + public JsonCreatorDirect(Writer writer, boolean pretty, boolean comments) { + super(); + this.writer = writer; + this.pretty = pretty; + this.comments = pretty && comments; + } + + @Override + public void comment(String content) { + if (comments) { + commentList.add(content); + } + } + + @Override + public void beginObject() throws IOException { + checkState(); + writer.write("{"); + stepIn(); + if (!valued.isEmpty()) { + valued.set(0, true); + } + valued.add(0, false); + } + + private void commitComments() throws IOException { + if (comments) { + for (String s : commentList) { + writer.write("// "); + writer.write(s); + writer.write("\r\n"); + for (int i = 0; i < indent; i++) { + writer.write(" "); + } + } + commentList.clear(); + } + } + + + public void stepIn() throws IOException { + if (pretty) { + indent++; + writer.write("\r\n"); + for (int i = 0; i < indent; i++) { + writer.write(" "); + } + } + } + + public void stepOut() throws IOException { + if (pretty) { + indent--; + writer.write("\r\n"); + for (int i = 0; i < indent; i++) { + writer.write(" "); + } + } + } + + private void checkState() throws IOException { + commitComments(); + if (named) { + if (pretty) + writer.write(" : "); + else + writer.write(":"); + named = false; + } + if (!valued.isEmpty() && valued.get(0)) { + writer.write(","); + if (pretty) { + writer.write("\r\n"); + for (int i = 0; i < indent; i++) { + writer.write(" "); + } + } + valued.set(0, false); + } + } + + @Override + public void endObject() throws IOException { + stepOut(); + writer.write("}"); + valued.remove(0); + } + + @Override + public void nullValue() throws IOException { + checkState(); + writer.write("null"); + valued.set(0, true); + } + + @Override + public void name(String name) throws IOException { + checkState(); + writer.write("\""+name+"\""); + named = true; + } + + @Override + public void value(String value) throws IOException { + checkState(); + writer.write("\""+Utilities.escapeJson(value)+"\""); + valued.set(0, true); + } + + @Override + public void value(Boolean value) throws IOException { + checkState(); + if (value == null) + writer.write("null"); + else if (value.booleanValue()) + writer.write("true"); + else + writer.write("false"); + valued.set(0, true); + } + + @Override + public void value(BigDecimal value) throws IOException { + checkState(); + if (value == null) + writer.write("null"); + else + writer.write(value.toString()); + valued.set(0, true); + } + + @Override + public void valueNum(String value) throws IOException { + checkState(); + if (value == null) + writer.write("null"); + else + writer.write(value); + valued.set(0, true); + } + + @Override + public void value(Integer value) throws IOException { + checkState(); + if (value == null) + writer.write("null"); + else + writer.write(value.toString()); + valued.set(0, true); + } + + @Override + public void beginArray() throws IOException { + checkState(); + writer.write("["); + if (!valued.isEmpty()) { + valued.set(0, true); + } + valued.add(0, false); + } + + @Override + public void endArray() throws IOException { + writer.write("]"); + valued.remove(0); + } + + @Override + public void finish() throws IOException { + writer.flush(); + } + + @Override + public void link(String href) { + // not used + + } + + @Override + public void anchor(String name) { + // not used + } + + + @Override + public void externalLink(String string) { + // not used + } + + @Override + public void ellipse() { + // not used + } } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java index d93669b2a..ded1fcac7 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java @@ -1,5 +1,5 @@ -package org.hl7.fhir.r5.formats; - +package org.hl7.fhir.r5.formats; + /* Copyright (c) 2011+, HL7, Inc. All rights reserved. @@ -28,103 +28,108 @@ package org.hl7.fhir.r5.formats; POSSIBILITY OF SUCH DAMAGE. */ - - - -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.math.BigDecimal; - -import com.google.gson.stream.JsonWriter; - -public class JsonCreatorGson implements JsonCreator { - - JsonWriter gson; - - public JsonCreatorGson(OutputStreamWriter osw) { - gson = new JsonWriter(osw); - } - - @Override - public void beginObject() throws IOException { - gson.beginObject(); - } - - @Override - public void endObject() throws IOException { - gson.endObject(); - } - - @Override - public void nullValue() throws IOException { - gson.nullValue(); - } - - @Override - public void name(String name) throws IOException { - gson.name(name); - } - - @Override - public void value(String value) throws IOException { - gson.value(value); - } - - @Override - public void value(Boolean value) throws IOException { - gson.value(value); - } - - @Override - public void value(BigDecimal value) throws IOException { - gson.value(value); - } - - @Override - public void value(Integer value) throws IOException { - gson.value(value); - } - - @Override - public void beginArray() throws IOException { - gson.beginArray(); - } - - @Override - public void endArray() throws IOException { - gson.endArray(); - } - - @Override - public void finish() { - // nothing to do here - - } - - @Override - public void link(String href) { - // not used - } - - @Override - public void valueNum(String value) throws IOException { - value(new BigDecimal(value)); - } - - @Override - public void anchor(String name) { - // not used - } - - @Override - public void comment(String content) { - // gson (dense json) ignores comments - } - - - @Override - public void externalLink(String string) { - // not used - } - + + + +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.math.BigDecimal; + +import com.google.gson.stream.JsonWriter; + +public class JsonCreatorGson implements JsonCreator { + + JsonWriter gson; + + public JsonCreatorGson(OutputStreamWriter osw) { + gson = new JsonWriter(osw); + } + + @Override + public void beginObject() throws IOException { + gson.beginObject(); + } + + @Override + public void endObject() throws IOException { + gson.endObject(); + } + + @Override + public void nullValue() throws IOException { + gson.nullValue(); + } + + @Override + public void name(String name) throws IOException { + gson.name(name); + } + + @Override + public void value(String value) throws IOException { + gson.value(value); + } + + @Override + public void value(Boolean value) throws IOException { + gson.value(value); + } + + @Override + public void value(BigDecimal value) throws IOException { + gson.value(value); + } + + @Override + public void value(Integer value) throws IOException { + gson.value(value); + } + + @Override + public void beginArray() throws IOException { + gson.beginArray(); + } + + @Override + public void endArray() throws IOException { + gson.endArray(); + } + + @Override + public void finish() { + // nothing to do here + + } + + @Override + public void link(String href) { + // not used + } + + @Override + public void valueNum(String value) throws IOException { + value(new BigDecimal(value)); + } + + @Override + public void anchor(String name) { + // not used + } + + @Override + public void comment(String content) { + // gson (dense json) ignores comments + } + + + @Override + public void externalLink(String string) { + // not used + } + + @Override + public void ellipse() { + // not used + } + } \ No newline at end of file From 966798cc2f6efca73c4179fc06697cad24767960 Mon Sep 17 00:00:00 2001 From: Lloyd McKenzie Date: Wed, 4 Sep 2024 22:25:07 -0600 Subject: [PATCH 03/68] Missed commits --- .../hl7/fhir/utilities/xml/IXMLWriter.java | 160 +- .../org/hl7/fhir/utilities/xml/XMLWriter.java | 1783 +++++++++-------- 2 files changed, 978 insertions(+), 965 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java index 80459e7ad..0a2a61ec3 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java @@ -1,5 +1,5 @@ -package org.hl7.fhir.utilities.xml; - +package org.hl7.fhir.utilities.xml; + /* Copyright (c) 2011+, HL7, Inc. All rights reserved. @@ -28,80 +28,84 @@ package org.hl7.fhir.utilities.xml; POSSIBILITY OF SUCH DAMAGE. */ - - - -import java.io.IOException; - -import org.hl7.fhir.utilities.ElementDecoration; - - -/** - * Generalize - * @author dennisn - */ -public interface IXMLWriter { - - public abstract void start() throws IOException; - public abstract void end() throws IOException; - - public abstract void attribute(String namespace, String name, String value, boolean onlyIfNotEmpty) throws IOException; - public abstract void attribute(String namespace, String name, String value) throws IOException; - public abstract void attribute(String name, String value, boolean onlyIfNotEmpty) throws IOException; - public abstract void attribute(String name, String value) throws IOException; - public abstract void attributeNoLines(String name, String value) throws IOException; - - public abstract boolean namespaceDefined(String namespace); - public abstract boolean abbreviationDefined(String abbreviation); - public abstract String getDefaultNamespace(); - public abstract void namespace(String namespace) throws IOException; - public abstract void setDefaultNamespace(String namespace) throws IOException; - public abstract void namespace(String namespace, String abbreviation) throws IOException; - - public abstract void comment(String comment, boolean doPretty) throws IOException; - public abstract void decorate(ElementDecoration decoration) throws IOException; - public abstract void setSchemaLocation(String ns, String loc) throws IOException; - - public abstract void enter(String name) throws IOException; - public abstract void enter(String namespace, String name) throws IOException; - public abstract void enter(String namespace, String name, String comment) throws IOException; - - public abstract void exit() throws IOException; - public abstract void exit(String name) throws IOException; - public abstract void exit(String namespace, String name) throws IOException; - public abstract void exitToLevel(int count) throws IOException; - - - public abstract void element(String namespace, String name, String content, boolean onlyIfNotEmpty) throws IOException; - public abstract void element(String namespace, String name, String content, String comment) throws IOException; - public abstract void element(String namespace, String name, String content) throws IOException; - public abstract void element(String name, String content, boolean onlyIfNotEmpty) throws IOException; - public abstract void element(String name, String content) throws IOException; - public abstract void element(String name) throws IOException; - - public abstract void text(String content) throws IOException; - public abstract void text(String content, boolean dontEscape) throws IOException; - - public abstract void cData(String text) throws IOException; - - public abstract void writeBytes(byte[] bytes) throws IOException; - - public abstract boolean isPretty() throws IOException; - public abstract void setPretty(boolean pretty) throws IOException; - - /** - * Start comment inserts a - * so the comment doesn't close prematurely. - * @throws IOException - */ - public abstract void startCommentBlock() throws IOException; - public abstract void endCommentBlock() throws IOException; - public abstract void escapedText(String content) throws IOException; - - // this is only implemented by an implementation that is producing an xhtml representation, and is able to render elements as hyperlinks - public abstract void link(String href); - public abstract void anchor(String name); - public abstract void externalLink(String ref) throws IOException; + + + +import java.io.IOException; + +import org.hl7.fhir.utilities.ElementDecoration; + + +/** + * Generalize + * @author dennisn + */ +public interface IXMLWriter { + + public abstract void start() throws IOException; + public abstract void end() throws IOException; + + public abstract void attribute(String namespace, String name, String value, boolean onlyIfNotEmpty) throws IOException; + public abstract void attribute(String namespace, String name, String value) throws IOException; + public abstract void attribute(String name, String value, boolean onlyIfNotEmpty) throws IOException; + public abstract void attribute(String name, String value) throws IOException; + public abstract void attributeNoLines(String name, String value) throws IOException; + + public abstract boolean namespaceDefined(String namespace); + public abstract boolean abbreviationDefined(String abbreviation); + public abstract String getDefaultNamespace(); + public abstract void namespace(String namespace) throws IOException; + public abstract void setDefaultNamespace(String namespace) throws IOException; + public abstract void namespace(String namespace, String abbreviation) throws IOException; + + public abstract void comment(String comment, boolean doPretty) throws IOException; + public abstract void decorate(ElementDecoration decoration) throws IOException; + public abstract void setSchemaLocation(String ns, String loc) throws IOException; + + public abstract void enter(String name) throws IOException; + public abstract void enter(String namespace, String name) throws IOException; + public abstract void enter(String namespace, String name, String comment) throws IOException; + + public abstract void exit() throws IOException; + public abstract void exit(String name) throws IOException; + public abstract void exit(String namespace, String name) throws IOException; + public abstract void exitToLevel(int count) throws IOException; + + + public abstract void element(String namespace, String name, String content, boolean onlyIfNotEmpty) throws IOException; + public abstract void element(String namespace, String name, String content, String comment) throws IOException; + public abstract void element(String namespace, String name, String content) throws IOException; + public abstract void element(String name, String content, boolean onlyIfNotEmpty) throws IOException; + public abstract void element(String name, String content) throws IOException; + public abstract void element(String name) throws IOException; + + public abstract void text(String content) throws IOException; + public abstract void text(String content, boolean dontEscape) throws IOException; + + public abstract void cData(String text) throws IOException; + + public abstract void writeBytes(byte[] bytes) throws IOException; + + public abstract boolean isPretty() throws IOException; + public abstract void setPretty(boolean pretty) throws IOException; + + /** + * Start comment inserts a + * so the comment doesn't close prematurely. + * @throws IOException + */ + public abstract void startCommentBlock() throws IOException; + public abstract void endCommentBlock() throws IOException; + public abstract void escapedText(String content) throws IOException; + + // this is only implemented by an implementation that is producing an xhtml representation, and is able to render elements as hyperlinks + public abstract void link(String href); + public abstract void anchor(String name); + public abstract void externalLink(String ref) throws IOException; + + // this is only implemented by an implementation that is producing an xhtml representation and handles ellipsing elements + public abstract void ellipse() throws IOException; + public abstract void attributeEllipse(); } \ No newline at end of file diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java index a8e40fee0..777083e99 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java @@ -1,5 +1,5 @@ -package org.hl7.fhir.utilities.xml; - +package org.hl7.fhir.utilities.xml; + /* Copyright (c) 2011+, HL7, Inc. All rights reserved. @@ -28,889 +28,898 @@ package org.hl7.fhir.utilities.xml; POSSIBILITY OF SUCH DAMAGE. */ - - - -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; - -import org.hl7.fhir.utilities.ElementDecoration; - -/** - * XML Writer class. - */ -public class XMLWriter extends OutputStreamWriter implements IXMLWriter { - - private boolean xmlHeader = true; - private String charset; - private boolean prettyBase; - private boolean prettyHeader; - private boolean pendingClose; - private boolean pendingOpen; - private String pendingComment; - private int lineType = LINE_UNIX; - private OutputStream stream; - private boolean started = false; - private String[] specialAttributeNames = new String[] {"id", "name" }; - private boolean sortAttributes; - private int attributeLineWrap; - private boolean xml1_1; - - public final static int LINE_UNIX = 0; - public final static int LINE_WINDOWS = 1; - - public XMLWriter(OutputStream stream, String charset, boolean xml1_1) throws UnsupportedEncodingException { - super(stream, charset); - this.stream = stream; - this.charset = charset; - this.xml1_1 = xml1_1; - } - public XMLWriter(OutputStream stream, String charset) throws UnsupportedEncodingException { - super(stream, charset); - this.stream = stream; - this.charset = charset; - this.xml1_1 = false; - } - - protected boolean condition(boolean bTest, String message) throws IOException { - if (!bTest) - throw new IOException(message); - return bTest; - } - - // -- writing context ------------------------------------------------ - - - - /** - * Returns the encoding. - * - * @param charset - * @return encoding - * @throws IOException - */ - public static String getXMLCharsetName(String charset) throws IOException { - if (charset == null || charset.equals("")) - return "UTF-8"; - else if (charset.equals("US-ASCII")) - return "UTF-8"; - else if (XMLUtil.charSetImpliesAscii(charset)) - return "ISO-8859-1"; - else if (charset.equals("UTF-8")) - return "UTF-8"; - else if (charset.equals("UTF-16") || charset.equals("UTF-16BE") || charset.equals("UTF-16LE")) - return "UTF-16"; - else - throw new IOException("Unknown charset encoding "+charset); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#start() - */ - @Override - public void start() throws IOException { - condition(!started, "attempt to start after starting"); - levels.clear(); - attributes = null; - try { - if (xmlHeader) { - write(""); - if (prettyBase || prettyHeader) - write(lineType == LINE_UNIX ? "\n" : "\r\n"); - } - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - throw new IOException(e.getMessage()); - } - started = true; - } - - private void checkStarted () throws IOException { - condition(started, "not started"); - } - - private void checkInElement() throws IOException { - condition(levels.size() > 0, "not in an element"); - } - - // -- attributes ---------------------------------------------------- - - private String[][] attributes; - - private void addAttribute(String name, String value) throws IOException { - addAttribute(name, value, false); - } - - private void addAttribute(String name, String value, boolean noLines) throws IOException { - if (!XMLUtil.isNMToken(name)) - throw new IOException("XML name "+name+" is not valid for value '"+value+"'"); - - newLevelIfRequired(); - value = XMLUtil.escapeXML(value, charset, noLines); - - if (attributes == null) - attributes = new String[][] {{name, value}}; - else { - String[][] newattr = new String[attributes.length+1][]; - for (int i = 0; i < attributes.length; i++) { - condition(!attributes[i][0].equals(name), "attempt to define attribute with name "+name+" more than once for value '"+value+"'"); - newattr[i] = attributes[i]; - } - attributes = newattr; - attributes[attributes.length-1] = new String[] {name, value}; - } - } - - protected String getAttribute(String name) { - if (attributes != null) { - for (int i = 0; i < attributes.length; i++) { - if (attributes[i][0].equals(name)) { - return attributes[i][1]; - } - } - } - return null; - } - - protected void setAttribute(String name, String value) throws IOException { - newLevelIfRequired(); - if (attributes == null) - addAttribute(name, value, false); - else { - for (int i = 0; i < attributes.length; i++) { - if (attributes[i][0].equals(name)) { - attributes[i][1] = XMLUtil.escapeXML(value, charset, false); - return; - } - } - addAttribute(name, value); - } - } - - protected void commitAttributes() throws IOException { - - } - - - private boolean nameIsSpecial(String name) { - for (int i = 0; i < specialAttributeNames.length; i++) { - String n = specialAttributeNames[i]; - if (n.equalsIgnoreCase(name)) - return true; - } - return false; - } - - private void writeAttributes(int col) throws IOException { - commitAttributes(); - if (attributes != null && sortAttributes) - sortAttributes(); - int c = col; - c = writeAttributeSet(true, c, col); - writeAttributeSet(false, c, col); - attributes = null; - } - - - private void sortAttributes() { - // bubble sort - look, it's easy - for (int i = 0; i < attributes.length - 1; i++) { - for (int j = 0; j < attributes.length - 1; j++) { - if (String.CASE_INSENSITIVE_ORDER.compare(attributes[j][0], attributes[j+1][0]) < 0) { - String[] t = attributes[j]; - attributes[j] = attributes[j+1]; - attributes[j+1] = t; - } - } - } - - } - - - private int writeAttributeSet(boolean special, int col, int wrap) throws IOException { - // first pass: name, id - if (attributes != null) { - for (int i=0; i < attributes.length; i++) { - String[] element = attributes[i]; - if (nameIsSpecial(element[0]) == special) { - col = col + element[0].length()+element[1].length() + 4; - if (isPretty() && attributeLineWrap > 0 && col > attributeLineWrap && col > wrap) { - write(lineType == LINE_UNIX ? "\n" : "\r\n"); - for (int j = 0; j < wrap; j++) - write(" "); - col = wrap; - } - write(' '); - write(element[0]); - write("=\""); - if (element[1] != null) - write(xmlEscape(element[1])); - write("\""); - } - } - } - return col; - } - - protected String xmlEscape(String s) { - StringBuilder b = new StringBuilder(); - for (char c : s.toCharArray()) { - if (c < ' ') { - b.append("&#x"); - b.append(Integer.toHexString(c).toUpperCase()); - b.append(";"); - } else - b.append(c); - } - return b.toString(); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attribute(java.lang.String, java.lang.String, java.lang.String, boolean) - */ - @Override - public void attribute(String namespace, String name, String value, boolean onlyIfNotEmpty) throws IOException { - if (!onlyIfNotEmpty || value != null && !value.equals("")) - attribute(namespace, name, value); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attribute(java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public void attribute(String namespace, String name, String value) throws IOException { - - checkStarted(); - if (namespace == null || namespace.equals("")) - addAttribute(name, value); - else - addAttribute(getNSAbbreviation(namespace)+name, value); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attribute(java.lang.String, java.lang.String, boolean) - */ - @Override - public void attribute(String name, String value, boolean onlyIfNotEmpty) throws IOException { - if (!onlyIfNotEmpty || value != null && !value.equals("")) - attribute(name, value); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attribute(java.lang.String, java.lang.String) - */ - @Override - public void attribute(String name, String value) throws IOException { - checkStarted(); - addAttribute(name, value); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attributeNoLines(java.lang.String, java.lang.String) - */ - @Override - public void attributeNoLines(String name, String value) throws IOException { - checkStarted(); - addAttribute(name, value, true); - } - - // -- levels ------------------------------------------------- - - private XMLWriterStateStack levels = new XMLWriterStateStack(); - - private void newLevelIfRequired() throws IOException { - if (!pendingOpen) { - if (!levels.empty()) - levels.current().seeChild(); - XMLWriterState level = new XMLWriterState(); - level.setPretty(isPretty()); - levels.push(level); - pendingOpen = true; - } - } - - // -- namespaces --------------------------------------------- - - - private void defineNamespace(String namespace, String abbrev) throws IOException { - checkStarted(); - if (namespace != null && !namespace.equals("")) { - if ("".equals(abbrev)) - abbrev = null; - - newLevelIfRequired(); - - levels.current().addNamespaceDefn(namespace, abbrev); - if (abbrev == null) - addAttribute("xmlns", namespace); - else - addAttribute("xmlns:"+abbrev, namespace); - } - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#findByNamespace(java.lang.String) - */ - public XMLNamespace findByNamespace(String namespace) { - for (int i = levels.size() - 1; i >= 0; i--) { - XMLNamespace ns = levels.item(i).getDefnByNamespace(namespace); - if (ns != null) - return ns; - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#namespaceDefined(java.lang.String) - */ - @Override - public boolean namespaceDefined(String namespace) { - return namespace == null || namespace.equals("") || findByNamespace(namespace) != null; - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#findByAbbreviation(java.lang.String) - */ - public XMLNamespace findByAbbreviation(String abbreviation) { - for (int i = levels.size() - 1; i >= 0; i--) { - XMLNamespace ns = levels.item(i).getDefnByAbbreviation(abbreviation); - if (ns != null) - return ns; - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#abbreviationDefined(java.lang.String) - */ - @Override - public boolean abbreviationDefined(String abbreviation) { - return findByAbbreviation(abbreviation) != null; - } - - protected XMLNamespace findDefaultNamespace() { - for (int i = levels.size() - 1; i >= 0; i--) { - XMLNamespace ns = levels.item(i).getDefaultNamespace(); - if (ns != null) - return ns; - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#getDefaultNamespace() - */ - @Override - public String getDefaultNamespace() { - XMLNamespace ns = findDefaultNamespace(); - if (ns == null) - return null; - else - return ns.getNamespace(); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#namespace(java.lang.String) - */ - @Override - public void namespace(String namespace) throws IOException { - if (!namespaceDefined(namespace)) { - int index = 0; - while (abbreviationDefined("ns"+Integer.toString(index))) - index++; - defineNamespace(namespace, "ns"+Integer.toString(index)); - } - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#defaultNamespace(java.lang.String) - * - * Replace defaultNamespace() - */ - @Override - public void setDefaultNamespace(String namespace) throws IOException { - if ((namespace == null && getDefaultNamespace() != null) || - (namespace != null && !namespace.equals(getDefaultNamespace()))) - defineNamespace(namespace, ""); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#namespace(java.lang.String, java.lang.String) - */ - @Override - public void namespace(String namespace, String abbreviation) throws IOException { - XMLNamespace ns = findByAbbreviation(abbreviation); - if (ns == null || !ns.getNamespace().equals(namespace)) - defineNamespace(namespace, abbreviation); - } - - - private String getNSAbbreviation(String namespace) throws IOException { - if ("http://www.w3.org/XML/1998/namespace".equals(namespace)) - return "xml:"; - - if (namespace == null || "".equals(namespace) || "noNamespace".equals(namespace)) - return ""; - - XMLNamespace ns = findByNamespace(namespace); - if (ns == null) - throw new IOException("Namespace "+namespace+" is not defined"); - else if (ns.getAbbreviation() == null) - return ""; - else - return ns.getAbbreviation()+":"; - } - - // -- public API ----------------------------------------------------------- - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#comment(java.lang.String, boolean) - */ - @Override - public void comment(String comment, boolean doPretty) throws IOException { - checkStarted(); - if (pendingClose) { - write('>'); - writePendingComment(); - pendingClose = false; - } - if (doPretty) { - writePretty(); - } - if (levels.inComment()) - write(" "); - if (doPretty && !isPretty()) - writePretty(); - } - - - private void writePendingComment() throws IOException { - if (pendingComment != null) { - if (isPretty()) - write(" "); - if (levels.inComment()) - write(""); - } - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#open(java.lang.String, java.lang.String) - */ - @Override - public void enter(String namespace, String name) throws IOException { - enter(namespace, name, null); - } - - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#open(java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public void enter(String namespace, String name, String comment) throws IOException { - if (name == null) - throw new Error("name == null"); - if (!XMLUtil.isNMToken(name)) - throw new IOException("XML name "+name+" is not valid"); - checkStarted(); - if (pendingClose) { - write('>'); - writePendingComment(); - pendingClose = false; - } - - if (name == null) { - throw new IOException("name is null"); - } - newLevelIfRequired(); - levels.current().setName(name); - levels.current().setNamespace(namespace); - int col = writePretty(); - write('<'); - if (namespace == null) { - write(name); - col = col + name.length()+1; - } else { - String n = getNSAbbreviation(namespace)+name; - write(n); - col = col + n.length()+1; - } - writeAttributes(col); - pendingOpen = false; - pendingClose = true; - pendingComment = comment; - } - - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#close(java.lang.String) - */ - @Override - public void exit(String name) throws IOException { - checkStarted(); - if (levels.empty()) - throw new IOException("Unable to close null|"+name+", nothing to close"); - if (levels.current().getNamespace() != null || !levels.current().getName().equals(name)) - throw new IOException("Unable to close null|"+name+", found "+levels.current().getNamespace()+"|"+levels.current().getName()); - exit(); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#close(java.lang.String, java.lang.String) - */ - @Override - public void exit(String namespace, String name) throws IOException { - checkStarted(); - if (levels.empty()) - throw new IOException("Unable to close "+namespace+"|"+name+", nothing to close"); - if (levels == null) - throw new Error("levels = null"); - if (levels.current() == null) - throw new Error("levels.current() = null"); - if (levels.current().getName() == null) - throw new Error("levels.current().getName() = null"); - if (levels.current().getNamespace() == null) - throw new Error("levels.current().getNamespace() = null"); - if (name == null) - throw new Error("name = null"); - if (namespace == null) - throw new Error("namespace = null"); - if (!levels.current().getNamespace().equals(namespace) || !levels.current().getName().equals(name)) - throw new IOException("Unable to close "+namespace+"|"+name+", found "+levels.current().getNamespace()+"|"+levels.current().getName()); - exit(); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#closeToLevel(int) - */ - @Override - public void exitToLevel(int count) throws IOException { - checkStarted(); - while (levels.size() > count) - exit(); - } - - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#close() - */ - @Override - public void close() throws IOException { - checkStarted(); - if (!levels.empty()) - throw new IOException("Called close before exiting all opened elements"); - super.close(); - } - - @Override - public void end() throws IOException { - checkStarted(); - if (!levels.empty()) - throw new IOException("Called end() before exiting all opened elements"); - flush(); - } - @Override - public void exit() throws IOException { - checkStarted(); - if (levels.empty()) { - throw new IOException("Called exit one too many times"); - } else { - if (pendingClose) { - write("/>"); - writePendingComment(); - pendingClose = false; - } else { - if (levels.current().hasChildren()) - writePretty(); - write("'); - } - levels.pop(); - } - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#open(java.lang.String) - */ - @Override - public void enter(String name) throws IOException { - enter(null, name); - } - - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String, java.lang.String, boolean) - */ - @Override - public void element(String namespace, String name, String content, boolean onlyIfNotEmpty) throws IOException { - if (!onlyIfNotEmpty || content != null && !content.equals("")) - element(namespace, name, content); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public void element(String namespace, String name, String content, String comment) throws IOException { - if (!XMLUtil.isNMToken(name)) - throw new IOException("XML name "+name+" is not valid"); - enter(namespace, name, comment); - text(content); - exit(); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public void element(String namespace, String name, String content) throws IOException { - if (!XMLUtil.isNMToken(name)) - throw new IOException("XML name "+name+" is not valid"); - enter(namespace, name); - text(content); - exit(); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String, boolean) - */ - @Override - public void element(String name, String content, boolean onlyIfNotEmpty) throws IOException { - if (!onlyIfNotEmpty || content != null && !content.equals("")) - element(null, name, content); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String) - */ - @Override - public void element(String name, String content) throws IOException { - element(null, name, content); - } - - @Override - public void element(String name) throws IOException { - element(null, name, null); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#text(java.lang.String) - */ - @Override - public void text(String content) throws IOException { - text(content, false); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#text(java.lang.String, boolean) - * - * Replace escapeText() - */ - @Override - public void text(String content, boolean dontEscape) throws IOException { - checkInElement(); - if (content != null) { - if (pendingClose) { - write(">"); - writePendingComment(); - pendingClose = false; - } - if (dontEscape) - write(content); - else - write(XMLUtil.escapeXML(content, charset, false)); - } - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#cData(java.lang.String) - */ - @Override - public void cData(String text) throws IOException { - text(""); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#writeBytes(byte[]) - */ - @Override - public void writeBytes(byte[] bytes) throws IOException { - checkInElement(); - if (pendingClose) { - write(">"); - writePendingComment(); - pendingClose = false; - } - flush(); - stream.write(bytes); - } - - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#isPretty() - */ - @Override - public boolean isPretty() throws IOException { - return (levels == null || levels.empty()) ? prettyBase : levels.current().isPretty(); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#setPretty(boolean) - */ - @Override - public void setPretty(boolean pretty) throws IOException { - if (levels == null || levels.empty()) - this.prettyBase = pretty; - else - levels.current().setPretty(pretty); - } - - /* (non-Javadoc) - * @see org.eclipse.ohf.utilities.xml.IXMLWriter#startCommentBlock() - */ - @Override - public void startCommentBlock() throws IOException { - if (levels.inComment()) - throw new IOException("cannot nest comments"); - levels.current().setInComment(true); - if (isPretty()) - writePretty(); - write(""); - if (isPretty()) - writePretty(); - levels.current().setInComment(false); - } - - public boolean isSortAttributes() { - return sortAttributes; - } - - public void setSortAttributes(boolean sortAttributes) { - this.sortAttributes = sortAttributes; - } - - - public boolean isPrettyHeader() { - return prettyHeader; - } - - public void setPrettyHeader(boolean pretty) { - this.prettyHeader = pretty; - } - - public int writePretty() throws IOException { - return writePretty(true); - } - - public int writePretty(boolean eoln) throws IOException { - if (isPretty()) { - if (eoln) - write(lineType == LINE_UNIX ? "\n" : "\r\n"); - for (int i = 0; i < levels.size() - 1; i++) - write(" "); - return (levels.size() - 1) * 2; - } else - return 0; - } - - public int getLineType() { - return lineType; - } - - public void setLineType(int lineType) { - this.lineType = lineType; - } - - public boolean isXmlHeader() { - return xmlHeader; - } - - public void setXmlHeader(boolean xmlHeader) { - this.xmlHeader = xmlHeader; - } - - public String[] getSpecialAttributeNames() { - return specialAttributeNames; - } - - public void setSpecialAttributeNames(String[] specialAttributeNames) { - this.specialAttributeNames = specialAttributeNames; - } - - public int getAttributeLineWrap() { - return attributeLineWrap; - } - - public void setAttributeLineWrap(int attributeLineWrap) { - this.attributeLineWrap = attributeLineWrap; - } - - @Override - public void escapedText(String content) throws IOException { - text(""); - int i = content.length(); - if (isPretty()) - while (i > 0 && (content.charAt(i-1) == '\r' || content.charAt(i-1) == '\n')) - i--; - write(content.substring(0, i)); - } - - public void processingInstruction(String value) throws IOException { - write(""); - if (isPrettyHeader()) - write("\r\n"); - } - - @Override - public void link(String href) { - // ignore this - - } - - @Override - public void anchor(String name) { - // ignore this - } - - @Override - public void decorate(ElementDecoration element) throws IOException { - // nothing... - } - @Override - public void setSchemaLocation(String ns, String loc) throws IOException { - namespace("http://www.w3.org/2001/XMLSchema-instance", "xsi"); - attribute("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation", ns+" "+loc); - - } - @Override - public void externalLink(String ref) { - // ignore this - } - - + + + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; + +import org.hl7.fhir.utilities.ElementDecoration; + +/** + * XML Writer class. + */ +public class XMLWriter extends OutputStreamWriter implements IXMLWriter { + + private boolean xmlHeader = true; + private String charset; + private boolean prettyBase; + private boolean prettyHeader; + private boolean pendingClose; + private boolean pendingOpen; + private String pendingComment; + private int lineType = LINE_UNIX; + private OutputStream stream; + private boolean started = false; + private String[] specialAttributeNames = new String[] {"id", "name" }; + private boolean sortAttributes; + private int attributeLineWrap; + private boolean xml1_1; + + public final static int LINE_UNIX = 0; + public final static int LINE_WINDOWS = 1; + + public XMLWriter(OutputStream stream, String charset, boolean xml1_1) throws UnsupportedEncodingException { + super(stream, charset); + this.stream = stream; + this.charset = charset; + this.xml1_1 = xml1_1; + } + public XMLWriter(OutputStream stream, String charset) throws UnsupportedEncodingException { + super(stream, charset); + this.stream = stream; + this.charset = charset; + this.xml1_1 = false; + } + + protected boolean condition(boolean bTest, String message) throws IOException { + if (!bTest) + throw new IOException(message); + return bTest; + } + + // -- writing context ------------------------------------------------ + + + + /** + * Returns the encoding. + * + * @param charset + * @return encoding + * @throws IOException + */ + public static String getXMLCharsetName(String charset) throws IOException { + if (charset == null || charset.equals("")) + return "UTF-8"; + else if (charset.equals("US-ASCII")) + return "UTF-8"; + else if (XMLUtil.charSetImpliesAscii(charset)) + return "ISO-8859-1"; + else if (charset.equals("UTF-8")) + return "UTF-8"; + else if (charset.equals("UTF-16") || charset.equals("UTF-16BE") || charset.equals("UTF-16LE")) + return "UTF-16"; + else + throw new IOException("Unknown charset encoding "+charset); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#start() + */ + @Override + public void start() throws IOException { + condition(!started, "attempt to start after starting"); + levels.clear(); + attributes = null; + try { + if (xmlHeader) { + write(""); + if (prettyBase || prettyHeader) + write(lineType == LINE_UNIX ? "\n" : "\r\n"); + } + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + throw new IOException(e.getMessage()); + } + started = true; + } + + private void checkStarted () throws IOException { + condition(started, "not started"); + } + + private void checkInElement() throws IOException { + condition(levels.size() > 0, "not in an element"); + } + + // -- attributes ---------------------------------------------------- + + private String[][] attributes; + + private void addAttribute(String name, String value) throws IOException { + addAttribute(name, value, false); + } + + private void addAttribute(String name, String value, boolean noLines) throws IOException { + if (!XMLUtil.isNMToken(name)) + throw new IOException("XML name "+name+" is not valid for value '"+value+"'"); + + newLevelIfRequired(); + value = XMLUtil.escapeXML(value, charset, noLines); + + if (attributes == null) + attributes = new String[][] {{name, value}}; + else { + String[][] newattr = new String[attributes.length+1][]; + for (int i = 0; i < attributes.length; i++) { + condition(!attributes[i][0].equals(name), "attempt to define attribute with name "+name+" more than once for value '"+value+"'"); + newattr[i] = attributes[i]; + } + attributes = newattr; + attributes[attributes.length-1] = new String[] {name, value}; + } + } + + protected String getAttribute(String name) { + if (attributes != null) { + for (int i = 0; i < attributes.length; i++) { + if (attributes[i][0].equals(name)) { + return attributes[i][1]; + } + } + } + return null; + } + + protected void setAttribute(String name, String value) throws IOException { + newLevelIfRequired(); + if (attributes == null) + addAttribute(name, value, false); + else { + for (int i = 0; i < attributes.length; i++) { + if (attributes[i][0].equals(name)) { + attributes[i][1] = XMLUtil.escapeXML(value, charset, false); + return; + } + } + addAttribute(name, value); + } + } + + protected void commitAttributes() throws IOException { + + } + + + private boolean nameIsSpecial(String name) { + for (int i = 0; i < specialAttributeNames.length; i++) { + String n = specialAttributeNames[i]; + if (n.equalsIgnoreCase(name)) + return true; + } + return false; + } + + private void writeAttributes(int col) throws IOException { + commitAttributes(); + if (attributes != null && sortAttributes) + sortAttributes(); + int c = col; + c = writeAttributeSet(true, c, col); + writeAttributeSet(false, c, col); + attributes = null; + } + + + private void sortAttributes() { + // bubble sort - look, it's easy + for (int i = 0; i < attributes.length - 1; i++) { + for (int j = 0; j < attributes.length - 1; j++) { + if (String.CASE_INSENSITIVE_ORDER.compare(attributes[j][0], attributes[j+1][0]) < 0) { + String[] t = attributes[j]; + attributes[j] = attributes[j+1]; + attributes[j+1] = t; + } + } + } + + } + + + private int writeAttributeSet(boolean special, int col, int wrap) throws IOException { + // first pass: name, id + if (attributes != null) { + for (int i=0; i < attributes.length; i++) { + String[] element = attributes[i]; + if (nameIsSpecial(element[0]) == special) { + col = col + element[0].length()+element[1].length() + 4; + if (isPretty() && attributeLineWrap > 0 && col > attributeLineWrap && col > wrap) { + write(lineType == LINE_UNIX ? "\n" : "\r\n"); + for (int j = 0; j < wrap; j++) + write(" "); + col = wrap; + } + write(' '); + write(element[0]); + write("=\""); + if (element[1] != null) + write(xmlEscape(element[1])); + write("\""); + } + } + } + return col; + } + + protected String xmlEscape(String s) { + StringBuilder b = new StringBuilder(); + for (char c : s.toCharArray()) { + if (c < ' ') { + b.append("&#x"); + b.append(Integer.toHexString(c).toUpperCase()); + b.append(";"); + } else + b.append(c); + } + return b.toString(); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attribute(java.lang.String, java.lang.String, java.lang.String, boolean) + */ + @Override + public void attribute(String namespace, String name, String value, boolean onlyIfNotEmpty) throws IOException { + if (!onlyIfNotEmpty || value != null && !value.equals("")) + attribute(namespace, name, value); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attribute(java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public void attribute(String namespace, String name, String value) throws IOException { + + checkStarted(); + if (namespace == null || namespace.equals("")) + addAttribute(name, value); + else + addAttribute(getNSAbbreviation(namespace)+name, value); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attribute(java.lang.String, java.lang.String, boolean) + */ + @Override + public void attribute(String name, String value, boolean onlyIfNotEmpty) throws IOException { + if (!onlyIfNotEmpty || value != null && !value.equals("")) + attribute(name, value); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attribute(java.lang.String, java.lang.String) + */ + @Override + public void attribute(String name, String value) throws IOException { + checkStarted(); + addAttribute(name, value); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#attributeNoLines(java.lang.String, java.lang.String) + */ + @Override + public void attributeNoLines(String name, String value) throws IOException { + checkStarted(); + addAttribute(name, value, true); + } + + // -- levels ------------------------------------------------- + + private XMLWriterStateStack levels = new XMLWriterStateStack(); + + private void newLevelIfRequired() throws IOException { + if (!pendingOpen) { + if (!levels.empty()) + levels.current().seeChild(); + XMLWriterState level = new XMLWriterState(); + level.setPretty(isPretty()); + levels.push(level); + pendingOpen = true; + } + } + + // -- namespaces --------------------------------------------- + + + private void defineNamespace(String namespace, String abbrev) throws IOException { + checkStarted(); + if (namespace != null && !namespace.equals("")) { + if ("".equals(abbrev)) + abbrev = null; + + newLevelIfRequired(); + + levels.current().addNamespaceDefn(namespace, abbrev); + if (abbrev == null) + addAttribute("xmlns", namespace); + else + addAttribute("xmlns:"+abbrev, namespace); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#findByNamespace(java.lang.String) + */ + public XMLNamespace findByNamespace(String namespace) { + for (int i = levels.size() - 1; i >= 0; i--) { + XMLNamespace ns = levels.item(i).getDefnByNamespace(namespace); + if (ns != null) + return ns; + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#namespaceDefined(java.lang.String) + */ + @Override + public boolean namespaceDefined(String namespace) { + return namespace == null || namespace.equals("") || findByNamespace(namespace) != null; + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#findByAbbreviation(java.lang.String) + */ + public XMLNamespace findByAbbreviation(String abbreviation) { + for (int i = levels.size() - 1; i >= 0; i--) { + XMLNamespace ns = levels.item(i).getDefnByAbbreviation(abbreviation); + if (ns != null) + return ns; + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#abbreviationDefined(java.lang.String) + */ + @Override + public boolean abbreviationDefined(String abbreviation) { + return findByAbbreviation(abbreviation) != null; + } + + protected XMLNamespace findDefaultNamespace() { + for (int i = levels.size() - 1; i >= 0; i--) { + XMLNamespace ns = levels.item(i).getDefaultNamespace(); + if (ns != null) + return ns; + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#getDefaultNamespace() + */ + @Override + public String getDefaultNamespace() { + XMLNamespace ns = findDefaultNamespace(); + if (ns == null) + return null; + else + return ns.getNamespace(); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#namespace(java.lang.String) + */ + @Override + public void namespace(String namespace) throws IOException { + if (!namespaceDefined(namespace)) { + int index = 0; + while (abbreviationDefined("ns"+Integer.toString(index))) + index++; + defineNamespace(namespace, "ns"+Integer.toString(index)); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#defaultNamespace(java.lang.String) + * + * Replace defaultNamespace() + */ + @Override + public void setDefaultNamespace(String namespace) throws IOException { + if ((namespace == null && getDefaultNamespace() != null) || + (namespace != null && !namespace.equals(getDefaultNamespace()))) + defineNamespace(namespace, ""); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#namespace(java.lang.String, java.lang.String) + */ + @Override + public void namespace(String namespace, String abbreviation) throws IOException { + XMLNamespace ns = findByAbbreviation(abbreviation); + if (ns == null || !ns.getNamespace().equals(namespace)) + defineNamespace(namespace, abbreviation); + } + + + private String getNSAbbreviation(String namespace) throws IOException { + if ("http://www.w3.org/XML/1998/namespace".equals(namespace)) + return "xml:"; + + if (namespace == null || "".equals(namespace) || "noNamespace".equals(namespace)) + return ""; + + XMLNamespace ns = findByNamespace(namespace); + if (ns == null) + throw new IOException("Namespace "+namespace+" is not defined"); + else if (ns.getAbbreviation() == null) + return ""; + else + return ns.getAbbreviation()+":"; + } + + // -- public API ----------------------------------------------------------- + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#comment(java.lang.String, boolean) + */ + @Override + public void comment(String comment, boolean doPretty) throws IOException { + checkStarted(); + if (pendingClose) { + write('>'); + writePendingComment(); + pendingClose = false; + } + if (doPretty) { + writePretty(); + } + if (levels.inComment()) + write(" "); + if (doPretty && !isPretty()) + writePretty(); + } + + + private void writePendingComment() throws IOException { + if (pendingComment != null) { + if (isPretty()) + write(" "); + if (levels.inComment()) + write(""); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#open(java.lang.String, java.lang.String) + */ + @Override + public void enter(String namespace, String name) throws IOException { + enter(namespace, name, null); + } + + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#open(java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public void enter(String namespace, String name, String comment) throws IOException { + if (name == null) + throw new Error("name == null"); + if (!XMLUtil.isNMToken(name)) + throw new IOException("XML name "+name+" is not valid"); + checkStarted(); + if (pendingClose) { + write('>'); + writePendingComment(); + pendingClose = false; + } + + if (name == null) { + throw new IOException("name is null"); + } + newLevelIfRequired(); + levels.current().setName(name); + levels.current().setNamespace(namespace); + int col = writePretty(); + write('<'); + if (namespace == null) { + write(name); + col = col + name.length()+1; + } else { + String n = getNSAbbreviation(namespace)+name; + write(n); + col = col + n.length()+1; + } + writeAttributes(col); + pendingOpen = false; + pendingClose = true; + pendingComment = comment; + } + + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#close(java.lang.String) + */ + @Override + public void exit(String name) throws IOException { + checkStarted(); + if (levels.empty()) + throw new IOException("Unable to close null|"+name+", nothing to close"); + if (levels.current().getNamespace() != null || !levels.current().getName().equals(name)) + throw new IOException("Unable to close null|"+name+", found "+levels.current().getNamespace()+"|"+levels.current().getName()); + exit(); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#close(java.lang.String, java.lang.String) + */ + @Override + public void exit(String namespace, String name) throws IOException { + checkStarted(); + if (levels.empty()) + throw new IOException("Unable to close "+namespace+"|"+name+", nothing to close"); + if (levels == null) + throw new Error("levels = null"); + if (levels.current() == null) + throw new Error("levels.current() = null"); + if (levels.current().getName() == null) + throw new Error("levels.current().getName() = null"); + if (levels.current().getNamespace() == null) + throw new Error("levels.current().getNamespace() = null"); + if (name == null) + throw new Error("name = null"); + if (namespace == null) + throw new Error("namespace = null"); + if (!levels.current().getNamespace().equals(namespace) || !levels.current().getName().equals(name)) + throw new IOException("Unable to close "+namespace+"|"+name+", found "+levels.current().getNamespace()+"|"+levels.current().getName()); + exit(); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#closeToLevel(int) + */ + @Override + public void exitToLevel(int count) throws IOException { + checkStarted(); + while (levels.size() > count) + exit(); + } + + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#close() + */ + @Override + public void close() throws IOException { + checkStarted(); + if (!levels.empty()) + throw new IOException("Called close before exiting all opened elements"); + super.close(); + } + + @Override + public void end() throws IOException { + checkStarted(); + if (!levels.empty()) + throw new IOException("Called end() before exiting all opened elements"); + flush(); + } + @Override + public void exit() throws IOException { + checkStarted(); + if (levels.empty()) { + throw new IOException("Called exit one too many times"); + } else { + if (pendingClose) { + write("/>"); + writePendingComment(); + pendingClose = false; + } else { + if (levels.current().hasChildren()) + writePretty(); + write("'); + } + levels.pop(); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#open(java.lang.String) + */ + @Override + public void enter(String name) throws IOException { + enter(null, name); + } + + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String, java.lang.String, boolean) + */ + @Override + public void element(String namespace, String name, String content, boolean onlyIfNotEmpty) throws IOException { + if (!onlyIfNotEmpty || content != null && !content.equals("")) + element(namespace, name, content); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public void element(String namespace, String name, String content, String comment) throws IOException { + if (!XMLUtil.isNMToken(name)) + throw new IOException("XML name "+name+" is not valid"); + enter(namespace, name, comment); + text(content); + exit(); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public void element(String namespace, String name, String content) throws IOException { + if (!XMLUtil.isNMToken(name)) + throw new IOException("XML name "+name+" is not valid"); + enter(namespace, name); + text(content); + exit(); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String, boolean) + */ + @Override + public void element(String name, String content, boolean onlyIfNotEmpty) throws IOException { + if (!onlyIfNotEmpty || content != null && !content.equals("")) + element(null, name, content); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#element(java.lang.String, java.lang.String) + */ + @Override + public void element(String name, String content) throws IOException { + element(null, name, content); + } + + @Override + public void element(String name) throws IOException { + element(null, name, null); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#text(java.lang.String) + */ + @Override + public void text(String content) throws IOException { + text(content, false); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#text(java.lang.String, boolean) + * + * Replace escapeText() + */ + @Override + public void text(String content, boolean dontEscape) throws IOException { + checkInElement(); + if (content != null) { + if (pendingClose) { + write(">"); + writePendingComment(); + pendingClose = false; + } + if (dontEscape) + write(content); + else + write(XMLUtil.escapeXML(content, charset, false)); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#cData(java.lang.String) + */ + @Override + public void cData(String text) throws IOException { + text(""); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#writeBytes(byte[]) + */ + @Override + public void writeBytes(byte[] bytes) throws IOException { + checkInElement(); + if (pendingClose) { + write(">"); + writePendingComment(); + pendingClose = false; + } + flush(); + stream.write(bytes); + } + + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#isPretty() + */ + @Override + public boolean isPretty() throws IOException { + return (levels == null || levels.empty()) ? prettyBase : levels.current().isPretty(); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#setPretty(boolean) + */ + @Override + public void setPretty(boolean pretty) throws IOException { + if (levels == null || levels.empty()) + this.prettyBase = pretty; + else + levels.current().setPretty(pretty); + } + + /* (non-Javadoc) + * @see org.eclipse.ohf.utilities.xml.IXMLWriter#startCommentBlock() + */ + @Override + public void startCommentBlock() throws IOException { + if (levels.inComment()) + throw new IOException("cannot nest comments"); + levels.current().setInComment(true); + if (isPretty()) + writePretty(); + write(""); + if (isPretty()) + writePretty(); + levels.current().setInComment(false); + } + + public boolean isSortAttributes() { + return sortAttributes; + } + + public void setSortAttributes(boolean sortAttributes) { + this.sortAttributes = sortAttributes; + } + + + public boolean isPrettyHeader() { + return prettyHeader; + } + + public void setPrettyHeader(boolean pretty) { + this.prettyHeader = pretty; + } + + public int writePretty() throws IOException { + return writePretty(true); + } + + public int writePretty(boolean eoln) throws IOException { + if (isPretty()) { + if (eoln) + write(lineType == LINE_UNIX ? "\n" : "\r\n"); + for (int i = 0; i < levels.size() - 1; i++) + write(" "); + return (levels.size() - 1) * 2; + } else + return 0; + } + + public int getLineType() { + return lineType; + } + + public void setLineType(int lineType) { + this.lineType = lineType; + } + + public boolean isXmlHeader() { + return xmlHeader; + } + + public void setXmlHeader(boolean xmlHeader) { + this.xmlHeader = xmlHeader; + } + + public String[] getSpecialAttributeNames() { + return specialAttributeNames; + } + + public void setSpecialAttributeNames(String[] specialAttributeNames) { + this.specialAttributeNames = specialAttributeNames; + } + + public int getAttributeLineWrap() { + return attributeLineWrap; + } + + public void setAttributeLineWrap(int attributeLineWrap) { + this.attributeLineWrap = attributeLineWrap; + } + + @Override + public void escapedText(String content) throws IOException { + text(""); + int i = content.length(); + if (isPretty()) + while (i > 0 && (content.charAt(i-1) == '\r' || content.charAt(i-1) == '\n')) + i--; + write(content.substring(0, i)); + } + + public void processingInstruction(String value) throws IOException { + write(""); + if (isPrettyHeader()) + write("\r\n"); + } + + @Override + public void link(String href) { + // ignore this + + } + + @Override + public void anchor(String name) { + // ignore this + } + + @Override + public void decorate(ElementDecoration element) throws IOException { + // nothing... + } + @Override + public void setSchemaLocation(String ns, String loc) throws IOException { + namespace("http://www.w3.org/2001/XMLSchema-instance", "xsi"); + attribute("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation", ns+" "+loc); + + } + @Override + public void externalLink(String ref) { + // ignore this + } + + @Override + public void attributeEllipse() { + // ignore this + } + + @Override + public void ellipse() throws IOException { + // ignore this + } + } \ No newline at end of file From e001d781b94bb38f67a3f0c56c37047d0a3864e4 Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 9 Sep 2024 17:03:56 -0400 Subject: [PATCH 04/68] WIP tests for lock file cleanup --- .../npm/FilesystemPackageCacheManager.java | 19 +++++ .../FilesystemPackageCacheManagerLocks.java | 14 ++++ .../npm/FilesystemPackageManagerTests.java | 82 ++++++++++++++++++- 3 files changed, 111 insertions(+), 4 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java index df192cc19..37e55c020 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java @@ -215,12 +215,31 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple createIniFile(); } else { deleteOldTempDirectories(); + cleanUpCorruptPackages(); } } return null; }); } + /* + Look for .lock files that are not actively held by a process. If found, delete the lock file, and the package + referenced. + */ + protected void cleanUpCorruptPackages() throws IOException { + for (File file : Objects.requireNonNull(cacheFolder.listFiles())) { + if (file.getName().endsWith(".lock")) { + String packageDirectoryName = file.getName().substring(0, file.getName().length() - 5); + File packageDirectory = ManagedFileAccess.file(Utilities.path(cacheFolder, packageDirectoryName)); + if (packageDirectory.exists()) { + Utilities.clearDirectory(packageDirectory.getAbsolutePath()); + packageDirectory.delete(); + } + file.delete(); + } + } + } + private boolean isCacheFolderValid() throws IOException { String iniPath = getPackagesIniPath(); File iniFile = ManagedFileAccess.file(iniPath); diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java index d674c750e..fd75bde5d 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java @@ -118,6 +118,20 @@ public class FilesystemPackageCacheManagerLocks { if (!lockFile.exists()) { return; } + + // Check if the file is locked by a process. If it is not, it is likely an incomplete package cache install, and + // we should throw an exception. + if (lockFile.isFile()) { + try (FileChannel channel = new RandomAccessFile(lockFile, "rw").getChannel()) { + FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, true); + if (fileLock != null) { + fileLock.release(); + channel.close(); + throw new IOException("Lock file exists, but is not locked by a process: " + lockFile.getName()); + } + } + } + try (WatchService watchService = FileSystems.getDefault().newWatchService()) { Path dir = lockFile.getParentFile().toPath(); dir.register(watchService, StandardWatchEventKinds.ENTRY_DELETE); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java index 96754c2b8..0e135af8d 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java @@ -1,22 +1,30 @@ package org.hl7.fhir.utilities.npm; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; import java.io.File; import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Stream; import javax.annotation.Nonnull; +import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.filesystem.ManagedFileAccess; -import org.junit.jupiter.api.RepeatedTest; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledOnOs; import org.junit.jupiter.api.condition.EnabledOnOs; @@ -111,6 +119,67 @@ public class FilesystemPackageManagerTests { assertEquals( System.getenv("ProgramData") + "\\.fhir\\packages", folder.getAbsolutePath()); } + @Test + public void testFailureForUnlockedLockFiles() throws IOException, InterruptedException { + String pcmPath = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")).getAbsolutePath(); + + final FilesystemPackageCacheManager pcm = new FilesystemPackageCacheManager.Builder().withCacheFolder(pcmPath).build(); + + Assertions.assertTrue(pcm.listPackages().isEmpty()); + + //Now sneak in a new lock file and directory: + File lockFile = ManagedFileAccess.file(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); + lockFile.createNewFile(); + File directory = ManagedFileAccess.file(pcmPath, "example.fhir.uv.myig#1.2.3" ); + directory.mkdir(); + + IOException exception = assertThrows(IOException.class, () -> pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3")); + assertThat(exception.getMessage()).contains("Lock file exists, but is not locked by a process"); + } + + @Test + //@EnabledOnOs(OS.LINUX) + public void testCacheCleanupForUnlockedLockFiles() throws IOException, InterruptedException { + String pcmPath = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")).getAbsolutePath(); + + final FilesystemPackageCacheManager pcm = new FilesystemPackageCacheManager.Builder().withCacheFolder(pcmPath).build(); + + Assertions.assertTrue(pcm.listPackages().isEmpty()); + + String packageAndVersion = "example.fhir.uv.myig#1.2.3"; + String lockFileName = packageAndVersion + ".lock"; + //Now sneak in a new lock file and directory: + File lockFile = ManagedFileAccess.file(pcmPath, lockFileName); + lockFile.createNewFile(); + File directory = ManagedFileAccess.file(pcmPath, packageAndVersion); + directory.mkdir(); + + // We can't create a lock file from within the same JVM, so we have to use the flock utility, which is OS dependent. + // The following works for Linux only. + ProcessBuilder processBuilder = new ProcessBuilder("flock", lockFileName, "--command", "sleep 10"); + processBuilder.directory(new File(pcmPath)); + processBuilder.start(); + + ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); + + executorService.schedule(()->{ + try { + Utilities.clearDirectory(directory.getAbsolutePath()); + directory.delete(); + } catch (IOException e) { + throw new RuntimeException(e); + } + lockFile.delete(); + }, 15, TimeUnit.SECONDS); + + IOException ioException = assertThrows(IOException.class, () -> { pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3"); }); + + + ioException.printStackTrace(); + + + } + /** We repeat the same tests multiple times here, in order to catch very rare edge cases. */ @@ -133,7 +202,7 @@ public class FilesystemPackageManagerTests { Random rand = new Random(); final AtomicInteger totalSuccessful = new AtomicInteger(); - final ConcurrentHashMap successfulThreads = new ConcurrentHashMap(); + final ConcurrentHashMap successfulThreads = new ConcurrentHashMap<>(); List threads = new ArrayList<>(); for (int i = 0; i < threadTotal; i++) { final int index = i; @@ -142,22 +211,27 @@ public class FilesystemPackageManagerTests { System.out.println("Thread #" + index + ": " + Thread.currentThread().getId() + " started"); final int randomPCM = rand.nextInt(packageCacheManagerTotal); final int randomOperation = rand.nextInt(4); + final String operationName; if (packageCacheManagers[randomPCM] == null) { packageCacheManagers[randomPCM] = new FilesystemPackageCacheManager.Builder().withCacheFolder(pcmPath).build(); } FilesystemPackageCacheManager pcm = packageCacheManagers[randomPCM]; if (randomOperation == 0) { + operationName = "addPackageToCache"; pcm.addPackageToCache("example.fhir.uv.myig", "1.2.3", this.getClass().getResourceAsStream("/npm/dummy-package.tgz"), "https://packages.fhir.org/example.fhir.uv.myig/1.2.3"); } else if (randomOperation == 1) { + operationName = "clear"; pcm.clear(); } else if (randomOperation == 2) { + operationName = "loadPackageFromCacheOnly"; pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3"); } else { + operationName = "removePackage"; pcm.removePackage("example.fhir.uv.myig", "1.2.3"); } totalSuccessful.incrementAndGet(); successfulThreads.put(Thread.currentThread().getId(), index); - System.out.println("Thread #" + index + ": " + Thread.currentThread().getId() + " completed"); + System.out.println("Thread #" + index + ": " + Thread.currentThread().getId() + " completed. Ran: " + operationName); } catch (Exception e) { e.printStackTrace(); System.err.println("Thread #" + index + ": " + Thread.currentThread().getId() + " failed"); From fff805e5b73731394f22697f30625b07425618bc Mon Sep 17 00:00:00 2001 From: Lloyd McKenzie Date: Tue, 10 Sep 2024 08:07:01 -0600 Subject: [PATCH 05/68] Made changes as recommended by Grahame and Elliot --- .../org/hl7/fhir/r5/elementmodel/Element.java | 14 +++--- .../hl7/fhir/r5/elementmodel/JsonParser.java | 32 ++++++------- .../hl7/fhir/r5/elementmodel/XmlParser.java | 46 +++++++++---------- .../org/hl7/fhir/r5/formats/JsonCreator.java | 3 +- .../fhir/r5/formats/JsonCreatorCanonical.java | 5 +- .../fhir/r5/formats/JsonCreatorDirect.java | 5 +- .../hl7/fhir/r5/formats/JsonCreatorGson.java | 5 +- .../hl7/fhir/utilities/xml/IXMLWriter.java | 5 +- .../org/hl7/fhir/utilities/xml/XMLWriter.java | 7 ++- 9 files changed, 68 insertions(+), 54 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java index 1aaecc1c9..71643ba9e 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java @@ -162,7 +162,7 @@ public class Element extends Base implements NamedItem { private FhirFormat format; private Object nativeObject; private List sliceDefinitions; - private boolean ellipsed; + private boolean ellided; public Element(String name) { super(); @@ -1430,8 +1430,8 @@ public class Element extends Base implements NamedItem { public Base copy() { Element element = new Element(this); this.copyValues(element); - if (this.isEllipsed()) - element.setEllipsed(true); + if (this.isEllided()) + element.setEllided(true); return element; } @@ -1641,11 +1641,11 @@ public class Element extends Base implements NamedItem { return FhirPublication.fromCode(property.getStructure().getVersion()); } - public void setEllipsed(boolean ellipsed) { - this.ellipsed = ellipsed; + public void setEllided(boolean ellided) { + this.ellided = ellided; } - public boolean isEllipsed() { - return this.ellipsed; + public boolean isEllided() { + return this.ellided; } } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java index f8f77e387..20b27c8cd 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java @@ -86,8 +86,8 @@ public class JsonParser extends ParserBase { private JsonCreator json; private boolean allowComments; - private boolean ellipseElements; - private boolean suppressResourceType; + private boolean ellideElements; +// private boolean suppressResourceType; private Element baseElement; private boolean markedXhtml; @@ -785,7 +785,7 @@ public class JsonParser extends ParserBase { } checkComposeComments(e); json.beginObject(); - if (!isSuppressResourceType()) +// if (!isSuppressResourceType()) prop("resourceType", e.getType(), null); Set done = new HashSet(); for (Element child : e.getChildren()) { @@ -811,7 +811,7 @@ public class JsonParser extends ParserBase { checkComposeComments(e); json.beginObject(); - if (!isSuppressResourceType()) +// if (!isSuppressResourceType()) prop("resourceType", e.getType(), linkResolver == null ? null : linkResolver.resolveProperty(e.getProperty())); Set done = new HashSet(); for (Element child : e.getChildren()) { @@ -826,8 +826,8 @@ public class JsonParser extends ParserBase { if (wantCompose(path, child)) { boolean isList = child.hasElementProperty() ? child.getElementProperty().isList() : child.getProperty().isList(); if (!isList) {// for specials, ignore the cardinality of the stated type - if (child.isEllipsed() && ellipseElements) - json.ellipse(); + if (child.isEllided() && isEllideElements() && json.canEllide()) + json.ellide(); else compose(path, child); } else if (!done.contains(child.getName())) { @@ -887,8 +887,8 @@ public class JsonParser extends ParserBase { if (prim) { openArray(name, linkResolver == null ? null : linkResolver.resolveProperty(list.get(0).getProperty())); for (Element item : list) { - if (item.isEllipsed()) - json.ellipse(); + if (item.isEllided() && json.canEllide()) + json.ellide(); else if (item.hasValue()) { if (linkResolver != null && item.getProperty().isReference()) { String ref = linkResolver.resolveReference(getReferenceForElement(item)); @@ -908,8 +908,8 @@ public class JsonParser extends ParserBase { openArray(name, linkResolver == null ? null : linkResolver.resolveProperty(list.get(0).getProperty())); int i = 0; for (Element item : list) { - if (item.isEllipsed()) - json.ellipse(); + if (item.isEllided() && json.canEllide()) + json.ellide(); else if (item.hasChildren()) { open(null,null); if (item.getProperty().isResource()) { @@ -996,15 +996,15 @@ public class JsonParser extends ParserBase { return this; } - public boolean isEllipseElements() { - return ellipseElements; + public boolean isEllideElements() { + return ellideElements; } - public JsonParser setEllipseElements(boolean ellipseElements) { - this.ellipseElements = ellipseElements; + public JsonParser setEllideElements(boolean ellideElements) { + this.ellideElements = ellideElements; return this; } - +/* public boolean isSuppressResourceType() { return suppressResourceType; } @@ -1013,6 +1013,6 @@ public class JsonParser extends ParserBase { this.suppressResourceType = suppressResourceType; return this; } - +*/ } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java index ce65e2a0c..e2ef427be 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java @@ -94,7 +94,7 @@ import org.xml.sax.XMLReader; public class XmlParser extends ParserBase { private boolean allowXsiLocation; private String version; - private boolean ellipseElements; + private boolean ellideElements; public XmlParser(IWorkerContext context) { super(context); @@ -806,7 +806,7 @@ public class XmlParser extends ParserBase { } private void composeElement(IXMLWriter xml, Element element, String elementName, boolean root) throws IOException, FHIRException { - if (!(isEllipseElements() && element.isEllipsed())) { + if (!(isEllideElements() && element.isEllided())) { if (showDecorations) { @SuppressWarnings("unchecked") List decorations = (List) element.getUserData("fhir.decorations"); @@ -819,8 +819,8 @@ public class XmlParser extends ParserBase { } } if (isText(element.getProperty())) { - if (isEllipseElements() && element.isEllipsed()) - xml.ellipse(); + if (isEllideElements() && element.isEllided() && xml.canEllide()) + xml.ellide(); else { if (linkResolver != null) xml.link(linkResolver.resolveProperty(element.getProperty())); @@ -835,8 +835,8 @@ public class XmlParser extends ParserBase { xml.exit(element.getProperty().getXmlNamespace(),elementName); } } else if (!element.hasChildren() && !element.hasValue()) { - if (isEllipseElements() && element.isEllipsed()) - xml.ellipse(); + if (isEllideElements() && element.isEllided() && xml.canEllide()) + xml.ellide(); else { if (element.getExplicitType() != null) xml.attribute("xsi:type", element.getExplicitType()); @@ -844,8 +844,8 @@ public class XmlParser extends ParserBase { } } else if (element.isPrimitive() || (element.hasType() && isPrimitive(element.getType()))) { if (element.getType().equals("xhtml")) { - if (isEllipseElements() && element.isEllipsed()) - xml.ellipse(); + if (isEllideElements() && element.isEllided() && xml.canEllide()) + xml.ellide(); else { String rawXhtml = element.getValue(); if (isCdaText(element.getProperty())) { @@ -859,16 +859,16 @@ public class XmlParser extends ParserBase { } } } else if (isText(element.getProperty())) { - if (isEllipseElements() && element.isEllipsed()) - xml.ellipse(); + if (isEllideElements() && element.isEllided() && xml.canEllide()) + xml.ellide(); else { if (linkResolver != null) xml.link(linkResolver.resolveProperty(element.getProperty())); xml.text(element.getValue()); } } else { - if (isEllipseElements() && element.isEllipsed()) - xml.attributeEllipse(); + if (isEllideElements() && element.isEllided()) + xml.attributeEllide(); else { setXsiTypeIfIsTypeAttr(xml, element); if (element.hasValue()) { @@ -894,22 +894,22 @@ public class XmlParser extends ParserBase { } } } else { - if (isEllipseElements() && element.isEllipsed()) - xml.ellipse(); + if (isEllideElements() && element.isEllided() && xml.canEllide()) + xml.ellide(); else { setXsiTypeIfIsTypeAttr(xml, element); Set handled = new HashSet<>(); for (Element child : element.getChildren()) { if (!handled.contains(child.getName()) && isAttr(child.getProperty()) && wantCompose(element.getPath(), child)) { handled.add(child.getName()); - if (isEllipseElements() && child.isEllipsed()) - xml.attributeEllipse(); + if (isEllideElements() && child.isEllided()) + xml.attributeEllide(); else { String av = child.getValue(); if (child.getProperty().isList()) { for (Element c2 : element.getChildren()) { if (c2 != child && c2.getName().equals(child.getName())) { - if (c2.isEllipsed()) + if (c2.isEllided()) av = av + " ..."; else av = av + " " + c2.getValue(); @@ -948,8 +948,8 @@ public class XmlParser extends ParserBase { } for (Element child : element.getChildren()) { if (wantCompose(element.getPath(), child)) { - if (isEllipseElements() && child.isEllipsed()) - xml.ellipse(); + if (isEllideElements() && child.isEllided() && xml.canEllide()) + xml.ellide(); else { if (isText(child.getProperty())) { if (linkResolver != null) @@ -1073,12 +1073,12 @@ public class XmlParser extends ParserBase { } } - public boolean isEllipseElements() { - return ellipseElements; + public boolean isEllideElements() { + return ellideElements; } - public void setEllipseElements(boolean ellipseElements) { - this.ellipseElements = ellipseElements; + public void setEllideElements(boolean ellideElements) { + this.ellideElements = ellideElements; } } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java index 58f44d505..c5edc1180 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java @@ -71,5 +71,6 @@ public interface JsonCreator { void link(String href); void anchor(String string); void externalLink(String string); - void ellipse(); + void ellide(); + boolean canEllide(); } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java index badb9a4a0..43b16362b 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java @@ -281,7 +281,10 @@ public class JsonCreatorCanonical implements JsonCreator { } @Override - public void ellipse() { + public boolean canEllide() { return false; } + + @Override + public void ellide() { // not used } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java index 5132099f3..9148d8636 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java @@ -245,7 +245,10 @@ public class JsonCreatorDirect implements JsonCreator { } @Override - public void ellipse() { + public boolean canEllide() { return false; } + + @Override + public void ellide() { // not used } } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java index ded1fcac7..7d7a701ae 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java @@ -128,8 +128,11 @@ public class JsonCreatorGson implements JsonCreator { } @Override - public void ellipse() { + public void ellide() { // not used } + @Override + public boolean canEllide() { return false;} + } \ No newline at end of file diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java index 0a2a61ec3..cb0276f9d 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java @@ -106,6 +106,7 @@ public interface IXMLWriter { public abstract void externalLink(String ref) throws IOException; // this is only implemented by an implementation that is producing an xhtml representation and handles ellipsing elements - public abstract void ellipse() throws IOException; - public abstract void attributeEllipse(); + public abstract boolean canEllide(); + public abstract void ellide() throws IOException; + public abstract void attributeEllide(); } \ No newline at end of file diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java index 777083e99..aa70a26dd 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java @@ -913,12 +913,15 @@ public class XMLWriter extends OutputStreamWriter implements IXMLWriter { } @Override - public void attributeEllipse() { + public boolean canEllide() { return false; } + + @Override + public void attributeEllide() { // ignore this } @Override - public void ellipse() throws IOException { + public void ellide() throws IOException { // ignore this } From 729c2da4c05327365bb62c42f9188f6b47a8c8a7 Mon Sep 17 00:00:00 2001 From: Lloyd McKenzie Date: Tue, 10 Sep 2024 08:23:26 -0600 Subject: [PATCH 06/68] Fixed elide spelling --- .../org/hl7/fhir/r5/elementmodel/Element.java | 14 +++--- .../hl7/fhir/r5/elementmodel/JsonParser.java | 22 ++++----- .../hl7/fhir/r5/elementmodel/XmlParser.java | 46 +++++++++---------- .../org/hl7/fhir/r5/formats/JsonCreator.java | 4 +- .../fhir/r5/formats/JsonCreatorCanonical.java | 4 +- .../fhir/r5/formats/JsonCreatorDirect.java | 4 +- .../hl7/fhir/r5/formats/JsonCreatorGson.java | 4 +- .../hl7/fhir/utilities/xml/IXMLWriter.java | 6 +-- .../org/hl7/fhir/utilities/xml/XMLWriter.java | 6 +-- 9 files changed, 55 insertions(+), 55 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java index 71643ba9e..fffa8164a 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/Element.java @@ -162,7 +162,7 @@ public class Element extends Base implements NamedItem { private FhirFormat format; private Object nativeObject; private List sliceDefinitions; - private boolean ellided; + private boolean elided; public Element(String name) { super(); @@ -1430,8 +1430,8 @@ public class Element extends Base implements NamedItem { public Base copy() { Element element = new Element(this); this.copyValues(element); - if (this.isEllided()) - element.setEllided(true); + if (this.isElided()) + element.setElided(true); return element; } @@ -1641,11 +1641,11 @@ public class Element extends Base implements NamedItem { return FhirPublication.fromCode(property.getStructure().getVersion()); } - public void setEllided(boolean ellided) { - this.ellided = ellided; + public void setElided(boolean elided) { + this.elided = elided; } - public boolean isEllided() { - return this.ellided; + public boolean isElided() { + return this.elided; } } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java index 20b27c8cd..fa64c7ada 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java @@ -86,7 +86,7 @@ public class JsonParser extends ParserBase { private JsonCreator json; private boolean allowComments; - private boolean ellideElements; + private boolean elideElements; // private boolean suppressResourceType; private Element baseElement; @@ -826,8 +826,8 @@ public class JsonParser extends ParserBase { if (wantCompose(path, child)) { boolean isList = child.hasElementProperty() ? child.getElementProperty().isList() : child.getProperty().isList(); if (!isList) {// for specials, ignore the cardinality of the stated type - if (child.isEllided() && isEllideElements() && json.canEllide()) - json.ellide(); + if (child.isElided() && isElideElements() && json.canElide()) + json.elide(); else compose(path, child); } else if (!done.contains(child.getName())) { @@ -887,8 +887,8 @@ public class JsonParser extends ParserBase { if (prim) { openArray(name, linkResolver == null ? null : linkResolver.resolveProperty(list.get(0).getProperty())); for (Element item : list) { - if (item.isEllided() && json.canEllide()) - json.ellide(); + if (item.isElided() && json.canElide()) + json.elide(); else if (item.hasValue()) { if (linkResolver != null && item.getProperty().isReference()) { String ref = linkResolver.resolveReference(getReferenceForElement(item)); @@ -908,8 +908,8 @@ public class JsonParser extends ParserBase { openArray(name, linkResolver == null ? null : linkResolver.resolveProperty(list.get(0).getProperty())); int i = 0; for (Element item : list) { - if (item.isEllided() && json.canEllide()) - json.ellide(); + if (item.isElided() && json.canElide()) + json.elide(); else if (item.hasChildren()) { open(null,null); if (item.getProperty().isResource()) { @@ -996,12 +996,12 @@ public class JsonParser extends ParserBase { return this; } - public boolean isEllideElements() { - return ellideElements; + public boolean isElideElements() { + return elideElements; } - public JsonParser setEllideElements(boolean ellideElements) { - this.ellideElements = ellideElements; + public JsonParser setElideElements(boolean elideElements) { + this.elideElements = elideElements; return this; } /* diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java index e2ef427be..4669b6095 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/XmlParser.java @@ -94,7 +94,7 @@ import org.xml.sax.XMLReader; public class XmlParser extends ParserBase { private boolean allowXsiLocation; private String version; - private boolean ellideElements; + private boolean elideElements; public XmlParser(IWorkerContext context) { super(context); @@ -806,7 +806,7 @@ public class XmlParser extends ParserBase { } private void composeElement(IXMLWriter xml, Element element, String elementName, boolean root) throws IOException, FHIRException { - if (!(isEllideElements() && element.isEllided())) { + if (!(isElideElements() && element.isElided())) { if (showDecorations) { @SuppressWarnings("unchecked") List decorations = (List) element.getUserData("fhir.decorations"); @@ -819,8 +819,8 @@ public class XmlParser extends ParserBase { } } if (isText(element.getProperty())) { - if (isEllideElements() && element.isEllided() && xml.canEllide()) - xml.ellide(); + if (isElideElements() && element.isElided() && xml.canElide()) + xml.elide(); else { if (linkResolver != null) xml.link(linkResolver.resolveProperty(element.getProperty())); @@ -835,8 +835,8 @@ public class XmlParser extends ParserBase { xml.exit(element.getProperty().getXmlNamespace(),elementName); } } else if (!element.hasChildren() && !element.hasValue()) { - if (isEllideElements() && element.isEllided() && xml.canEllide()) - xml.ellide(); + if (isElideElements() && element.isElided() && xml.canElide()) + xml.elide(); else { if (element.getExplicitType() != null) xml.attribute("xsi:type", element.getExplicitType()); @@ -844,8 +844,8 @@ public class XmlParser extends ParserBase { } } else if (element.isPrimitive() || (element.hasType() && isPrimitive(element.getType()))) { if (element.getType().equals("xhtml")) { - if (isEllideElements() && element.isEllided() && xml.canEllide()) - xml.ellide(); + if (isElideElements() && element.isElided() && xml.canElide()) + xml.elide(); else { String rawXhtml = element.getValue(); if (isCdaText(element.getProperty())) { @@ -859,16 +859,16 @@ public class XmlParser extends ParserBase { } } } else if (isText(element.getProperty())) { - if (isEllideElements() && element.isEllided() && xml.canEllide()) - xml.ellide(); + if (isElideElements() && element.isElided() && xml.canElide()) + xml.elide(); else { if (linkResolver != null) xml.link(linkResolver.resolveProperty(element.getProperty())); xml.text(element.getValue()); } } else { - if (isEllideElements() && element.isEllided()) - xml.attributeEllide(); + if (isElideElements() && element.isElided()) + xml.attributeElide(); else { setXsiTypeIfIsTypeAttr(xml, element); if (element.hasValue()) { @@ -894,22 +894,22 @@ public class XmlParser extends ParserBase { } } } else { - if (isEllideElements() && element.isEllided() && xml.canEllide()) - xml.ellide(); + if (isElideElements() && element.isElided() && xml.canElide()) + xml.elide(); else { setXsiTypeIfIsTypeAttr(xml, element); Set handled = new HashSet<>(); for (Element child : element.getChildren()) { if (!handled.contains(child.getName()) && isAttr(child.getProperty()) && wantCompose(element.getPath(), child)) { handled.add(child.getName()); - if (isEllideElements() && child.isEllided()) - xml.attributeEllide(); + if (isElideElements() && child.isElided()) + xml.attributeElide(); else { String av = child.getValue(); if (child.getProperty().isList()) { for (Element c2 : element.getChildren()) { if (c2 != child && c2.getName().equals(child.getName())) { - if (c2.isEllided()) + if (c2.isElided()) av = av + " ..."; else av = av + " " + c2.getValue(); @@ -948,8 +948,8 @@ public class XmlParser extends ParserBase { } for (Element child : element.getChildren()) { if (wantCompose(element.getPath(), child)) { - if (isEllideElements() && child.isEllided() && xml.canEllide()) - xml.ellide(); + if (isElideElements() && child.isElided() && xml.canElide()) + xml.elide(); else { if (isText(child.getProperty())) { if (linkResolver != null) @@ -1073,12 +1073,12 @@ public class XmlParser extends ParserBase { } } - public boolean isEllideElements() { - return ellideElements; + public boolean isElideElements() { + return elideElements; } - public void setEllideElements(boolean ellideElements) { - this.ellideElements = ellideElements; + public void setElideElements(boolean elideElements) { + this.elideElements = elideElements; } } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java index c5edc1180..84c46ce0c 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreator.java @@ -71,6 +71,6 @@ public interface JsonCreator { void link(String href); void anchor(String string); void externalLink(String string); - void ellide(); - boolean canEllide(); + void elide(); + boolean canElide(); } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java index 43b16362b..426e9cb0e 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorCanonical.java @@ -281,10 +281,10 @@ public class JsonCreatorCanonical implements JsonCreator { } @Override - public boolean canEllide() { return false; } + public boolean canElide() { return false; } @Override - public void ellide() { + public void elide() { // not used } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java index 9148d8636..41ac714c9 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorDirect.java @@ -245,10 +245,10 @@ public class JsonCreatorDirect implements JsonCreator { } @Override - public boolean canEllide() { return false; } + public boolean canElide() { return false; } @Override - public void ellide() { + public void elide() { // not used } } \ No newline at end of file diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java index 7d7a701ae..14c76b0cd 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/formats/JsonCreatorGson.java @@ -128,11 +128,11 @@ public class JsonCreatorGson implements JsonCreator { } @Override - public void ellide() { + public void elide() { // not used } @Override - public boolean canEllide() { return false;} + public boolean canElide() { return false;} } \ No newline at end of file diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java index cb0276f9d..826ac97c0 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/IXMLWriter.java @@ -106,7 +106,7 @@ public interface IXMLWriter { public abstract void externalLink(String ref) throws IOException; // this is only implemented by an implementation that is producing an xhtml representation and handles ellipsing elements - public abstract boolean canEllide(); - public abstract void ellide() throws IOException; - public abstract void attributeEllide(); + public abstract boolean canElide(); + public abstract void elide() throws IOException; + public abstract void attributeElide(); } \ No newline at end of file diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java index aa70a26dd..cedf9ed71 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/xml/XMLWriter.java @@ -913,15 +913,15 @@ public class XMLWriter extends OutputStreamWriter implements IXMLWriter { } @Override - public boolean canEllide() { return false; } + public boolean canElide() { return false; } @Override - public void attributeEllide() { + public void attributeElide() { // ignore this } @Override - public void ellide() throws IOException { + public void elide() throws IOException { // ignore this } From f7cf74423c06356b5c3e3a9ba08bddeea0945a6d Mon Sep 17 00:00:00 2001 From: dotasek Date: Tue, 10 Sep 2024 17:07:27 -0400 Subject: [PATCH 07/68] WIP2 More tests on file lock --- .../FilesystemPackageCacheManagerLocks.java | 2 +- .../npm/FilesystemPackageManagerTests.java | 41 +++++++++-------- .../fhir/utilities/npm/LockfileUtility.java | 44 +++++++++++++++++++ 3 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java index fd75bde5d..fbe47dc63 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java @@ -195,7 +195,7 @@ public class FilesystemPackageCacheManagerLocks { try (FileChannel channel = new RandomAccessFile(lockFile, "rw").getChannel()) { FileLock fileLock = null; while (fileLock == null) { - fileLock = channel.tryLock(0, Long.MAX_VALUE, true); + fileLock = channel.tryLock(0, Long.MAX_VALUE, false); if (fileLock == null) { Thread.sleep(100); // Wait and retry } diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java index 0e135af8d..745ae798f 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java @@ -137,6 +137,24 @@ public class FilesystemPackageManagerTests { assertThat(exception.getMessage()).contains("Lock file exists, but is not locked by a process"); } + private static Thread lockWaitAndDelete(String path, String lockFileName, int seconds) { + Thread t = new Thread(() -> { + ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes:.", "org.hl7.fhir.utilities.npm.LockfileUtility", path, lockFileName, Integer.toString(seconds)); + try { + Process process = processBuilder.start(); + process.getErrorStream().transferTo(System.err); + process.getInputStream().transferTo(System.out); + process.waitFor(); + } catch (IOException | InterruptedException e) { + throw new RuntimeException(e); + } + }); + t.start(); + return t; + } + + + @Test //@EnabledOnOs(OS.LINUX) public void testCacheCleanupForUnlockedLockFiles() throws IOException, InterruptedException { @@ -150,34 +168,19 @@ public class FilesystemPackageManagerTests { String lockFileName = packageAndVersion + ".lock"; //Now sneak in a new lock file and directory: File lockFile = ManagedFileAccess.file(pcmPath, lockFileName); - lockFile.createNewFile(); + //lockFile.createNewFile(); File directory = ManagedFileAccess.file(pcmPath, packageAndVersion); directory.mkdir(); - // We can't create a lock file from within the same JVM, so we have to use the flock utility, which is OS dependent. - // The following works for Linux only. - ProcessBuilder processBuilder = new ProcessBuilder("flock", lockFileName, "--command", "sleep 10"); - processBuilder.directory(new File(pcmPath)); - processBuilder.start(); - - ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); - - executorService.schedule(()->{ - try { - Utilities.clearDirectory(directory.getAbsolutePath()); - directory.delete(); - } catch (IOException e) { - throw new RuntimeException(e); - } - lockFile.delete(); - }, 15, TimeUnit.SECONDS); + Thread lockingThread = lockWaitAndDelete(pcmPath, lockFileName, 10); + Thread.sleep(200); IOException ioException = assertThrows(IOException.class, () -> { pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3"); }); ioException.printStackTrace(); - + lockingThread.join(); } /** diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java new file mode 100644 index 000000000..c89321b08 --- /dev/null +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java @@ -0,0 +1,44 @@ +package org.hl7.fhir.utilities.npm; + +import org.hl7.fhir.utilities.filesystem.ManagedFileAccess; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; +import java.nio.file.Paths; + +public class LockfileUtility { + public static void main(String[] args) { + String lockFileName = args[1]; + String path = args[0]; + int seconds = Integer.parseInt(args[2]); + + try { + lockWaitAndDelete(path, lockFileName, seconds); + } catch (InterruptedException | IOException e) { + throw new RuntimeException(e); + } + + } + + private static void lockWaitAndDelete(String path, String lockFileName, int seconds) throws InterruptedException, IOException { + File file = Paths.get(path,lockFileName).toFile(); + try (FileChannel channel = new RandomAccessFile(file.getAbsolutePath(), "rw").getChannel()) { + FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, false); + if (fileLock != null) { + System.out.println("File "+lockFileName+" is locked. Waiting for " + seconds + " seconds to release"); + Thread.sleep(seconds * 1000L); + fileLock.release(); + System.out.println("File "+lockFileName+" is released."); + + channel.close(); + }}finally { + if (file.exists()) { + file.delete(); + } + } + } +} From a05f471c9cee3cb5428ca3a1e461c93f211d5d39 Mon Sep 17 00:00:00 2001 From: dotasek Date: Fri, 13 Sep 2024 16:49:46 -0400 Subject: [PATCH 08/68] Allow injection of lock parameters + correct usage of locked file write --- .../npm/FilesystemPackageCacheManager.java | 42 +++++---- .../FilesystemPackageCacheManagerLocks.java | 93 +++++++++++++------ .../FilesystemPackageManagerLockTests.java | 57 ++++++------ .../npm/FilesystemPackageManagerTests.java | 49 ++++------ .../fhir/utilities/npm/LockfileUtility.java | 61 ++++++++++-- 5 files changed, 189 insertions(+), 113 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java index fbc09e90f..71f11178e 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java @@ -8,6 +8,7 @@ import java.text.SimpleDateFormat; import java.util.*; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import lombok.Getter; import lombok.Setter; @@ -77,12 +78,13 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple private final FilesystemPackageCacheManagerLocks locks; + private final FilesystemPackageCacheManagerLocks.LockParameters lockParameters; + // When running in testing mode, some packages are provided from the test case repository rather than by the normal means // the PackageProvider is responsible for this. if no package provider is defined, or it declines to handle the package, // then the normal means will be used public interface IPackageProvider { boolean handlesPackage(String id, String version); - InputStreamWithSrc provide(String id, String version) throws IOException; } @@ -92,6 +94,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple public static final String PACKAGE_VERSION_REGEX_OPT = "^[A-Za-z][A-Za-z0-9\\_\\-]*(\\.[A-Za-z0-9\\_\\-]+)+(\\#[A-Za-z0-9\\-\\_]+(\\.[A-Za-z0-9\\-\\_]+)*)?$"; private static final Logger ourLog = LoggerFactory.getLogger(FilesystemPackageCacheManager.class); private static final String CACHE_VERSION = "3"; // second version - see wiki page + @Nonnull private final File cacheFolder; @@ -100,6 +103,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple private final Map ciList = new HashMap<>(); private JsonArray buildInfo; private boolean suppressErrors; + @Setter @Getter private boolean minimalMemory; @@ -113,9 +117,20 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple @Getter private final List packageServers; + @With + @Getter + private final FilesystemPackageCacheManagerLocks.LockParameters lockParameters; + public Builder() throws IOException { this.cacheFolder = getUserCacheFolder(); this.packageServers = getPackageServersFromFHIRSettings(); + this.lockParameters = null; + } + + private Builder(File cacheFolder, List packageServers, FilesystemPackageCacheManagerLocks.LockParameters lockParameters) { + this.cacheFolder = cacheFolder; + this.packageServers = packageServers; + this.lockParameters = lockParameters; } private File getUserCacheFolder() throws IOException { @@ -143,17 +158,12 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple return PackageServer.getConfiguredServers(); } - private Builder(File cacheFolder, List packageServers) { - this.cacheFolder = cacheFolder; - this.packageServers = packageServers; - } - public Builder withCacheFolder(String cacheFolderPath) throws IOException { File cacheFolder = ManagedFileAccess.file(cacheFolderPath); if (!cacheFolder.exists()) { throw new FHIRException("The folder '" + cacheFolder + "' could not be found"); } - return new Builder(cacheFolder, this.packageServers); + return new Builder(cacheFolder, this.packageServers, this.lockParameters); } public Builder withSystemCacheFolder() throws IOException { @@ -163,11 +173,11 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple } else { systemCacheFolder = ManagedFileAccess.file(Utilities.path("/var", "lib", ".fhir", "packages")); } - return new Builder(systemCacheFolder, this.packageServers); + return new Builder(systemCacheFolder, this.packageServers, this.lockParameters); } public Builder withTestingCacheFolder() throws IOException { - return new Builder(ManagedFileAccess.file(Utilities.path("[tmp]", ".fhir", "packages")), this.packageServers); + return new Builder(ManagedFileAccess.file(Utilities.path("[tmp]", ".fhir", "packages")), this.packageServers, this.lockParameters); } public FilesystemPackageCacheManager build() throws IOException { @@ -181,15 +191,15 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple throw e; } } - return new FilesystemPackageCacheManager(cacheFolder, packageServers, locks); + return new FilesystemPackageCacheManager(cacheFolder, packageServers, locks, lockParameters); } } - private FilesystemPackageCacheManager(@Nonnull File cacheFolder, @Nonnull List packageServers, @Nonnull FilesystemPackageCacheManagerLocks locks) throws IOException { + private FilesystemPackageCacheManager(@Nonnull File cacheFolder, @Nonnull List packageServers, @Nonnull FilesystemPackageCacheManagerLocks locks, @Nullable FilesystemPackageCacheManagerLocks.LockParameters lockParameters) throws IOException { super(packageServers); this.cacheFolder = cacheFolder; this.locks = locks; - + this.lockParameters = lockParameters; prepareCacheFolder(); } @@ -441,7 +451,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple } return null; - }); + }, lockParameters); } /** @@ -485,7 +495,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple return null; } return loadPackageInfo(path); - }); + }, lockParameters); if (foundPackage != null) { if (foundPackage.isIndexed()){ return foundPackage; @@ -508,7 +518,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple String path = Utilities.path(cacheFolder, foundPackageFolder); output.checkIndexed(path); return output; - }); + }, lockParameters); } } } @@ -609,7 +619,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple throw e; } return npmPackage; - }); + }, lockParameters); } private void log(String s) { diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java index bb68ae248..85b852da3 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java @@ -1,14 +1,18 @@ package org.hl7.fhir.utilities.npm; import lombok.Getter; -import org.hl7.fhir.utilities.TextFile; +import lombok.With; import org.hl7.fhir.utilities.Utilities; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; +import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; +import java.nio.charset.StandardCharsets; import java.nio.file.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -27,9 +31,23 @@ public class FilesystemPackageCacheManagerLocks { private final File cacheFolder; - private final Long lockTimeoutTime; + private static final LockParameters lockParameters = new LockParameters(); - private final TimeUnit lockTimeoutTimeUnit; + public static class LockParameters { + @Getter @With + private final long lockTimeoutTime; + @Getter @With + private final TimeUnit lockTimeoutTimeUnit; + + public LockParameters() { + this(60L, TimeUnit.SECONDS); + } + + public LockParameters(long lockTimeoutTime, TimeUnit lockTimeoutTimeUnit) { + this.lockTimeoutTime = lockTimeoutTime; + this.lockTimeoutTimeUnit = lockTimeoutTimeUnit; + } + } /** * This method is intended to be used only for testing purposes. @@ -43,21 +61,9 @@ public class FilesystemPackageCacheManagerLocks { * @throws IOException */ public FilesystemPackageCacheManagerLocks(File cacheFolder) throws IOException { - this(cacheFolder, 60L, TimeUnit.SECONDS); - } - - private FilesystemPackageCacheManagerLocks(File cacheFolder, Long lockTimeoutTime, TimeUnit lockTimeoutTimeUnit) throws IOException { this.cacheFolder = cacheFolder; - this.lockTimeoutTime = lockTimeoutTime; - this.lockTimeoutTimeUnit = lockTimeoutTimeUnit; } - /** - * This method is intended to be used only for testing purposes. - */ - protected FilesystemPackageCacheManagerLocks withLockTimeout(Long lockTimeoutTime, TimeUnit lockTimeoutTimeUnit) throws IOException { - return new FilesystemPackageCacheManagerLocks(cacheFolder, lockTimeoutTime, lockTimeoutTimeUnit); - } /** * Returns a single FilesystemPackageCacheManagerLocks instance for the given cacheFolder. @@ -114,7 +120,7 @@ public class FilesystemPackageCacheManagerLocks { this.lock = lock; } - private void checkForLockFileWaitForDeleteIfExists(File lockFile) throws IOException { + private void checkForLockFileWaitForDeleteIfExists(File lockFile, @Nonnull LockParameters lockParameters) throws IOException { if (!lockFile.exists()) { return; } @@ -129,10 +135,11 @@ public class FilesystemPackageCacheManagerLocks { channel.close(); throw new IOException("Lock file exists, but is not locked by a process: " + lockFile.getName()); } + System.out.println("File is locked."); } } try { - waitForLockFileDeletion(lockFile); + waitForLockFileDeletion(lockFile, lockParameters); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new IOException("Thread interrupted while waiting for lock", e); @@ -143,12 +150,13 @@ public class FilesystemPackageCacheManagerLocks { Wait for the lock file to be deleted. If the lock file is not deleted within the timeout or if the thread is interrupted, an IOException is thrown. */ - private void waitForLockFileDeletion(File lockFile) throws IOException, InterruptedException { + private void waitForLockFileDeletion(File lockFile, @Nonnull LockParameters lockParameters) throws IOException, InterruptedException { + try (WatchService watchService = FileSystems.getDefault().newWatchService()) { Path dir = lockFile.getParentFile().toPath(); dir.register(watchService, StandardWatchEventKinds.ENTRY_DELETE); - WatchKey key = watchService.poll(lockTimeoutTime, lockTimeoutTimeUnit); + WatchKey key = watchService.poll(lockParameters.lockTimeoutTime, lockParameters.lockTimeoutTimeUnit); if (key == null) { // It is possible that the lock file is deleted before the watch service is registered, so if we timeout at // this point, we should check if the lock file still exists. @@ -173,15 +181,27 @@ public class FilesystemPackageCacheManagerLocks { } - public T doReadWithLock(FilesystemPackageCacheManager.CacheLockFunction f) throws IOException { + /** + * Wraps the execution of a package read function with the appropriate cache, package, and .lock file locking and + * checks. + * + * @param function The function to execute + * @param lockParameters The parameters for the lock + * @return The return of the function + * @param The return type of the function + * @throws IOException If an error occurs while managing locking. + */ + public T doReadWithLock(FilesystemPackageCacheManager.CacheLockFunction function, @Nullable LockParameters lockParameters) throws IOException { + final LockParameters resolvedLockParameters = lockParameters != null ? lockParameters : FilesystemPackageCacheManagerLocks.lockParameters; + cacheLock.getLock().readLock().lock(); lock.readLock().lock(); - checkForLockFileWaitForDeleteIfExists(lockFile); + checkForLockFileWaitForDeleteIfExists(lockFile, resolvedLockParameters); T result = null; try { - result = f.get(); + result = function.get(); } finally { lock.readLock().unlock(); cacheLock.getLock().readLock().unlock(); @@ -189,7 +209,19 @@ public class FilesystemPackageCacheManagerLocks { return result; } - public T doWriteWithLock(FilesystemPackageCacheManager.CacheLockFunction f) throws IOException { + /** + * Wraps the execution of a package write function with the appropriate cache, package, and .lock file locking and + * checks. + * + * @param function The function to execute + * @param lockParameters The parameters for the lock + * @return The return of the function + * @param The return type of the function + * @throws IOException If an error occurs while managing locking. + */ + public T doWriteWithLock(FilesystemPackageCacheManager.CacheLockFunction function, @Nullable LockParameters lockParameters) throws IOException { + final LockParameters resolvedLockParameters = lockParameters != null ? lockParameters : FilesystemPackageCacheManagerLocks.lockParameters; + cacheLock.getLock().writeLock().lock(); lock.writeLock().lock(); @@ -198,19 +230,20 @@ public class FilesystemPackageCacheManagerLocks { FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, false); if (fileLock == null) { - waitForLockFileDeletion(lockFile); + waitForLockFileDeletion(lockFile, resolvedLockParameters); + fileLock = channel.tryLock(0, Long.MAX_VALUE, false); + } + if (fileLock == null) { + throw new IOException("Failed to acquire lock on file: " + lockFile.getName()); } if (!lockFile.isFile()) { - try { - TextFile.stringToFile(String.valueOf(ProcessHandle.current().pid()), lockFile); - } catch (IOException e) { - throw new IOException("Error writing lock file.", e); - } + final ByteBuffer buff = ByteBuffer.wrap(String.valueOf(ProcessHandle.current().pid()).getBytes(StandardCharsets.UTF_8)); + channel.write(buff); } T result = null; try { - result = f.get(); + result = function.get(); } finally { fileLock.release(); channel.close(); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java index f1d71dda3..a597fbacb 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java @@ -1,6 +1,5 @@ package org.hl7.fhir.utilities.npm; -import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.filesystem.ManagedFileAccess; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -12,6 +11,7 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -49,13 +49,13 @@ public class FilesystemPackageManagerLockTests { packageLock.doWriteWithLock(() -> { assertThat(packageLock.getLockFile()).exists(); return null; - }); + }, null); assertThat(packageLock.getLockFile()).doesNotExist(); packageLock.doReadWithLock(() -> { assertThat(packageLock.getLockFile()).doesNotExist(); return null; - }); + }, null); } @Test void testNoPackageWriteOrReadWhileWholeCacheIsLocked() throws IOException, InterruptedException { @@ -87,7 +87,7 @@ public class FilesystemPackageManagerLockTests { packageLock.doWriteWithLock(() -> { assertThat(cacheLockFinished.get()).isTrue(); return null; - }); + }, null); } catch (IOException e) { throw new RuntimeException(e); } @@ -97,7 +97,7 @@ public class FilesystemPackageManagerLockTests { packageLock.doReadWithLock(() -> { assertThat(cacheLockFinished.get()).isTrue(); return null; - }); + }, null); } catch (IOException e) { throw new RuntimeException(e); } @@ -133,7 +133,7 @@ public class FilesystemPackageManagerLockTests { assertThat(writeCount).isEqualTo(1); writeCounter.decrementAndGet(); return null; - }); + }, null); } catch (IOException e) { throw new RuntimeException(e); } @@ -156,7 +156,7 @@ public class FilesystemPackageManagerLockTests { } readCounter.decrementAndGet(); return null; - }); + }, null); } catch (IOException e) { throw new RuntimeException(e); } @@ -179,49 +179,46 @@ public class FilesystemPackageManagerLockTests { } @Test - public void testReadWhenLockedByFileTimesOut() throws IOException { - FilesystemPackageCacheManagerLocks shorterTimeoutManager = filesystemPackageCacheLockManager.withLockTimeout(3L, TimeUnit.SECONDS); + public void testReadWhenLockedByFileTimesOut() throws IOException, InterruptedException, TimeoutException { + FilesystemPackageCacheManagerLocks shorterTimeoutManager = filesystemPackageCacheLockManager; final FilesystemPackageCacheManagerLocks.PackageLock packageLock = shorterTimeoutManager.getPackageLock(DUMMY_PACKAGE); - File lockFile = createPackageLockFile(); + File lockFile = getPackageLockFile(); + Thread lockThread = LockfileUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); + LockfileUtility.waitForLockfileCreation(cachePath,lockFile.getName()); Exception exception = assertThrows(IOException.class, () -> { packageLock.doReadWithLock(() -> { assertThat(lockFile).exists(); return null; - }); + }, new FilesystemPackageCacheManagerLocks.LockParameters(3L, TimeUnit.SECONDS)); }); - assertThat(exception.getMessage()).contains("Error reading package"); + assertThat(exception.getMessage()).contains("Package cache timed out waiting for lock"); assertThat(exception.getCause().getMessage()).contains("Timeout waiting for lock file deletion: " + lockFile.getName()); + + lockThread.join(); } @Test - public void testReadWhenLockFileIsDeleted() throws IOException { - FilesystemPackageCacheManagerLocks shorterTimeoutManager = filesystemPackageCacheLockManager.withLockTimeout(5L, TimeUnit.SECONDS); - final FilesystemPackageCacheManagerLocks.PackageLock packageLock = shorterTimeoutManager.getPackageLock(DUMMY_PACKAGE); - File lockFile = createPackageLockFile(); + public void testReadWhenLockFileIsDeleted() throws IOException, InterruptedException, TimeoutException { - Thread t = new Thread(() -> { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - lockFile.delete(); - }); - t.start(); + final FilesystemPackageCacheManagerLocks.PackageLock packageLock = filesystemPackageCacheLockManager.getPackageLock(DUMMY_PACKAGE); + + final File lockFile = getPackageLockFile(); + + Thread lockThread = LockfileUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); + LockfileUtility.waitForLockfileCreation(cachePath,lockFile.getName()); packageLock.doReadWithLock(() -> { assertThat(lockFile).doesNotExist(); return null; - }); + }, new FilesystemPackageCacheManagerLocks.LockParameters(10L, TimeUnit.SECONDS)); + lockThread.join(); } - private File createPackageLockFile() throws IOException { - File lockFile = Path.of(cachePath, DUMMY_PACKAGE + ".lock").toFile(); - TextFile.stringToFile("", lockFile); - return lockFile; + private File getPackageLockFile() { + return Path.of(cachePath, DUMMY_PACKAGE + ".lock").toFile(); } } diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java index e87c8d8f1..5cfb1ae2a 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java @@ -16,6 +16,7 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Stream; @@ -118,44 +119,35 @@ public class FilesystemPackageManagerTests { } @Test - public void testTimeoutForLockedPackageRead() throws IOException, InterruptedException { + public void testTimeoutForLockedPackageRead() throws IOException, InterruptedException, TimeoutException { String pcmPath = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")).getAbsolutePath(); - final FilesystemPackageCacheManager pcm = new FilesystemPackageCacheManager.Builder().withCacheFolder(pcmPath).build(); + final FilesystemPackageCacheManager pcm = new FilesystemPackageCacheManager.Builder() + .withCacheFolder(pcmPath) + .withLockParameters(new FilesystemPackageCacheManagerLocks.LockParameters(5,TimeUnit.SECONDS)) + .build(); Assertions.assertTrue(pcm.listPackages().isEmpty()); - //Now sneak in a new lock file and directory: - File lockFile = ManagedFileAccess.file(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); - lockFile.createNewFile(); + Thread lockThread = LockfileUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 10); File directory = ManagedFileAccess.file(pcmPath, "example.fhir.uv.myig#1.2.3" ); directory.mkdir(); + LockfileUtility.waitForLockfileCreation(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); + IOException exception = assertThrows(IOException.class, () -> pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3")); - assertThat(exception.getMessage()).contains("Error reading package."); + + assertThat(exception.getMessage()).contains("Package cache timed out waiting for lock"); assertThat(exception.getCause().getMessage()).contains("Timeout waiting for lock file deletion"); + lockThread.join(); } - private static Thread lockWaitAndDelete(String path, String lockFileName, int seconds) { - Thread t = new Thread(() -> { - ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes:.", "org.hl7.fhir.utilities.npm.LockfileUtility", path, lockFileName, Integer.toString(seconds)); - try { - Process process = processBuilder.start(); - process.getErrorStream().transferTo(System.err); - process.getInputStream().transferTo(System.out); - process.waitFor(); - } catch (IOException | InterruptedException e) { - throw new RuntimeException(e); - } - }); - t.start(); - return t; - } + @Test - public void testReadFromCacheOnlyWaitsForLockDelete() throws IOException, InterruptedException { + public void testReadFromCacheOnlyWaitsForLockDelete() throws IOException, InterruptedException, TimeoutException { String pcmPath = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")).getAbsolutePath(); final FilesystemPackageCacheManager pcm = new FilesystemPackageCacheManager.Builder().withCacheFolder(pcmPath).build(); @@ -166,23 +158,20 @@ public class FilesystemPackageManagerTests { String packageAndVersion = "example.fhir.uv.myig#1.2.3"; - String lockFileName = packageAndVersion + ".lock"; //Now sneak in a new lock file and directory: - File lockFile = ManagedFileAccess.file(pcmPath, lockFileName); - lockFile.createNewFile(); + File directory = ManagedFileAccess.file(pcmPath, packageAndVersion); directory.mkdir(); - final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); - executor.schedule(() -> { - lockFile.delete(); - }, 5, TimeUnit.SECONDS); + Thread lockThread = LockfileUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 5); + LockfileUtility.waitForLockfileCreation(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); + NpmPackage npmPackage = pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3"); assertThat(npmPackage.id()).isEqualTo("example.fhir.uv.myig"); - + lockThread.join(); } /** diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java index c89321b08..5d4bedd10 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java @@ -1,14 +1,14 @@ package org.hl7.fhir.utilities.npm; -import org.hl7.fhir.utilities.filesystem.ManagedFileAccess; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.RandomAccessFile; +import java.io.*; +import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; -import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.nio.file.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; public class LockfileUtility { public static void main(String[] args) { @@ -24,14 +24,61 @@ public class LockfileUtility { } + public static void waitForLockfileCreation(String path, String lockFileName) throws InterruptedException, IOException, TimeoutException { + if (Files.exists(Paths.get(path, lockFileName))) { + return; + } + try (WatchService watchService = FileSystems.getDefault().newWatchService()) { + Path dir = Paths.get(path); + dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE); + + WatchKey key = watchService.poll(10, TimeUnit.SECONDS); + if (key == null) { + throw new TimeoutException("Timeout waiting for lock file creation: " + lockFileName); + } + for (WatchEvent event : key.pollEvents()) { + WatchEvent.Kind kind = event.kind(); + if (kind == StandardWatchEventKinds.ENTRY_CREATE) { + Path createdFile = (Path) event.context(); + if (createdFile.toString().equals(lockFileName)) { + System.out.println("Lock file created: " + lockFileName); + return; + } + } + } + throw new TimeoutException("Timeout waiting for lock file creation: " + lockFileName); + } + } + + public static Thread lockWaitAndDeleteInNewProcess(String path, String lockFileName, int seconds) { + Thread t = new Thread(() -> { + ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes:.", "org.hl7.fhir.utilities.npm.LockfileUtility", path, lockFileName, Integer.toString(seconds)); + try { + Process process = processBuilder.start(); + process.getErrorStream().transferTo(System.err); + process.getInputStream().transferTo(System.out); + process.waitFor(); + } catch (IOException | InterruptedException e) { + throw new RuntimeException(e); + } + }); + t.start(); + return t; + } + private static void lockWaitAndDelete(String path, String lockFileName, int seconds) throws InterruptedException, IOException { + File file = Paths.get(path,lockFileName).toFile(); + try (FileChannel channel = new RandomAccessFile(file.getAbsolutePath(), "rw").getChannel()) { FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, false); if (fileLock != null) { - System.out.println("File "+lockFileName+" is locked. Waiting for " + seconds + " seconds to release"); + final ByteBuffer buff = ByteBuffer.wrap("Hello world".getBytes(StandardCharsets.UTF_8)); + channel.write(buff); + System.out.println("File "+lockFileName+" is locked. Waiting for " + seconds + " seconds to release. "); Thread.sleep(seconds * 1000L); fileLock.release(); + System.out.println(System.currentTimeMillis()); System.out.println("File "+lockFileName+" is released."); channel.close(); From 9dae4118ae843e3380d845ee0a29d6bc1d277f94 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sat, 14 Sep 2024 08:26:07 +0800 Subject: [PATCH 09/68] refactor error handling in ProfileUtilities --- .../conformance/profile/ProfileUtilities.java | 95 ++++++++++--------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java index 7a75e0358..bc8d243a2 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java @@ -413,11 +413,10 @@ public class ProfileUtilities { // note that ProfileUtilities are used re-entrantly internally, so nothing with process state can be here private final IWorkerContext context; private FHIRPathEngine fpe; - private List messages; + private List messages = new ArrayList(); private List snapshotStack = new ArrayList(); private ProfileKnowledgeProvider pkp; // private boolean igmode; - private boolean exception; private ValidationOptions terminologyServiceOptions = new ValidationOptions(FhirPublication.R5); private boolean newSlicingProcessing; private String defWebRoot; @@ -431,11 +430,16 @@ public class ProfileUtilities { private MappingMergeModeOption mappingMergeMode = MappingMergeModeOption.APPEND; private boolean forPublication; private List obligationProfiles = new ArrayList<>(); + private boolean wantThrowExceptions; public ProfileUtilities(IWorkerContext context, List messages, ProfileKnowledgeProvider pkp, FHIRPathEngine fpe) { super(); this.context = context; - this.messages = messages; + if (messages != null) { + this.messages = messages; + } else { + wantThrowExceptions = true; + } this.pkp = pkp; this.fpe = fpe; @@ -447,7 +451,11 @@ public class ProfileUtilities { public ProfileUtilities(IWorkerContext context, List messages, ProfileKnowledgeProvider pkp) { super(); this.context = context; - this.messages = messages; + if (messages != null) { + this.messages = messages; + } else { + wantThrowExceptions = true; + } this.pkp = pkp; if (context != null) { this.fpe = new FHIRPathEngine(context, this); @@ -789,7 +797,7 @@ public class ProfileUtilities { ce++; if (e.hasId()) { String msg = "No match found for "+e.getId()+" in the generated snapshot: check that the path and definitions are legal in the differential (including order)"; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.differential.element["+i+"]", msg, ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.differential.element["+i+"]", msg, ValidationMessage.IssueSeverity.ERROR)); } } i++; @@ -862,19 +870,19 @@ public class ProfileUtilities { slice.getFocus().setMin(count); } else { String msg = "The slice definition for "+slice.getFocus().getId()+" has a minimum of "+slice.getFocus().getMin()+" but the slices add up to a minimum of "+count; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+slice.getIndex()+"]", msg, forPublication ? ValidationMessage.IssueSeverity.ERROR : ValidationMessage.IssueSeverity.INFORMATION).setIgnorableError(true)); } } count = slice.checkMax(); if (count > -1 && repeats) { String msg = "The slice definition for "+slice.getFocus().getId()+" has a maximum of "+slice.getFocus().getMax()+" but the slices add up to a maximum of "+count+". Check that this is what is intended"; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+slice.getIndex()+"]", msg, ValidationMessage.IssueSeverity.INFORMATION)); } if (!slice.checkMinMax()) { String msg = "The slice definition for "+slice.getFocus().getId()+" has a maximum of "+slice.getFocus().getMax()+" which is less than the minimum of "+slice.getFocus().getMin(); - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+slice.getIndex()+"]", msg, ValidationMessage.IssueSeverity.WARNING)); } slices.remove(s); @@ -885,13 +893,13 @@ public class ProfileUtilities { } if (ed.hasSliceName() && !slices.containsKey(ed.getPath())) { String msg = "The element "+ed.getId()+" launches straight into slicing without the slicing being set up properly first"; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+i+"]", msg, ValidationMessage.IssueSeverity.ERROR).setIgnorableError(true)); } if (ed.hasSliceName() && slices.containsKey(ed.getPath())) { if (!slices.get(ed.getPath()).count(ed, ed.getSliceName())) { String msg = "Duplicate slice name "+ed.getSliceName()+" on "+ed.getId()+" (["+i+"])"; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+i+"]", msg, ValidationMessage.IssueSeverity.ERROR).setIgnorableError(true)); } } @@ -910,10 +918,8 @@ public class ProfileUtilities { } } if (sd == null) { - if (messages != null) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+i+"]", "The type of profile "+u.getValue()+" cannot be checked as the profile is not known", IssueSeverity.WARNING)); - } } else { String wt = t.getWorkingCode(); if (ed.getPath().equals("Bundle.entry.response.outcome")) { @@ -1012,13 +1018,15 @@ public class ProfileUtilities { } private void handleError(String url, String msg) { - if (exception) - throw new DefinitionException(msg); - else - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, url, msg, ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, url, msg, ValidationMessage.IssueSeverity.ERROR)); } - + private void addMessage(ValidationMessage msg) { + messages.add(msg); + if (msg.getLevel() == IssueSeverity.ERROR && wantThrowExceptions) { + throw new DefinitionException(msg.getMessage()); + } + } private void copyInheritedExtensions(StructureDefinition base, StructureDefinition derived, String webUrl) { @@ -2249,7 +2257,7 @@ public class ProfileUtilities { * Not sure we have enough information here to do the check properly. Might be better done when we're sorting the profile? if (i != start && result.isEmpty() && !path.startsWith(context.getElement().get(start).getPath())) - messages.add(new ValidationMessage(Source.ProfileValidator, IssueType.VALUE, "StructureDefinition.differential.element["+Integer.toString(start)+"]", "Error: unknown element '"+context.getElement().get(start).getPath()+"' (or it is out of order) in profile '"+url+"' (looking for '"+path+"')", IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, IssueType.VALUE, "StructureDefinition.differential.element["+Integer.toString(start)+"]", "Error: unknown element '"+context.getElement().get(start).getPath()+"' (or it is out of order) in profile '"+url+"' (looking for '"+path+"')", IssueSeverity.WARNING)); */ result.add(context.getElement().get(i)); @@ -2529,7 +2537,7 @@ public class ProfileUtilities { if (derived.hasMinElement()) { if (!Base.compareDeep(derived.getMinElement(), base.getMinElement(), false)) { if (derived.getMin() < base.getMin() && !derived.hasSliceName()) // in a slice, minimum cardinality rules do not apply - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+source.getPath(), "Element "+base.getPath()+": derived min ("+Integer.toString(derived.getMin())+") cannot be less than the base min ("+Integer.toString(base.getMin())+") in "+srcSD.getVersionedUrl(), ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+source.getPath(), "Element "+base.getPath()+": derived min ("+Integer.toString(derived.getMin())+") cannot be less than the base min ("+Integer.toString(base.getMin())+") in "+srcSD.getVersionedUrl(), ValidationMessage.IssueSeverity.ERROR)); base.setMinElement(derived.getMinElement().copy()); } else if (trimDifferential) derived.setMinElement(null); @@ -2540,7 +2548,7 @@ public class ProfileUtilities { if (derived.hasMaxElement()) { if (!Base.compareDeep(derived.getMaxElement(), base.getMaxElement(), false)) { if (isLargerMax(derived.getMax(), base.getMax())) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+source.getPath(), "Element "+base.getPath()+": derived max ("+derived.getMax()+") cannot be greater than the base max ("+base.getMax()+")", ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+source.getPath(), "Element "+base.getPath()+": derived max ("+derived.getMax()+") cannot be greater than the base max ("+base.getMax()+")", ValidationMessage.IssueSeverity.ERROR)); base.setMaxElement(derived.getMaxElement().copy()); } else if (trimDifferential) derived.setMaxElement(null); @@ -2642,7 +2650,7 @@ public class ProfileUtilities { } if (!(base.hasMustSupportElement() && Base.compareDeep(base.getMustSupportElement(), mse, false))) { if (base.hasMustSupport() && base.getMustSupport() && !derived.getMustSupport()) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Illegal constraint [must-support = false] when [must-support = true] in the base profile", ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Illegal constraint [must-support = false] when [must-support = true] in the base profile", ValidationMessage.IssueSeverity.ERROR)); } base.setMustSupportElement(mse); } else if (trimDifferential) @@ -2654,7 +2662,7 @@ public class ProfileUtilities { if (derived.hasMustHaveValueElement()) { if (!(base.hasMustHaveValueElement() && Base.compareDeep(derived.getMustHaveValueElement(), base.getMustHaveValueElement(), false))) { if (base.hasMustHaveValue() && base.getMustHaveValue() && !derived.getMustHaveValue()) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Illegal constraint [must-have-value = false] when [must-have-value = true] in the base profile", ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Illegal constraint [must-have-value = false] when [must-have-value = true] in the base profile", ValidationMessage.IssueSeverity.ERROR)); } base.setMustHaveValueElement(derived.getMustHaveValueElement().copy()); } else if (trimDifferential) @@ -2721,25 +2729,25 @@ public class ProfileUtilities { if (!base.hasBinding() || !Base.compareDeep(derived.getBinding(), base.getBinding(), false)) { if (base.hasBinding() && base.getBinding().getStrength() == BindingStrength.REQUIRED && derived.getBinding().getStrength() != BindingStrength.REQUIRED) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "illegal attempt to change the binding on "+derived.getPath()+" from "+base.getBinding().getStrength().toCode()+" to "+derived.getBinding().getStrength().toCode(), ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "illegal attempt to change the binding on "+derived.getPath()+" from "+base.getBinding().getStrength().toCode()+" to "+derived.getBinding().getStrength().toCode(), ValidationMessage.IssueSeverity.ERROR)); // throw new DefinitionException("StructureDefinition "+pn+" at "+derived.getPath()+": illegal attempt to change a binding from "+base.getBinding().getStrength().toCode()+" to "+derived.getBinding().getStrength().toCode()); else if (base.hasBinding() && derived.hasBinding() && base.getBinding().getStrength() == BindingStrength.REQUIRED && base.getBinding().hasValueSet() && derived.getBinding().hasValueSet()) { ValueSet baseVs = context.findTxResource(ValueSet.class, base.getBinding().getValueSet(), srcSD); ValueSet contextVs = context.findTxResource(ValueSet.class, derived.getBinding().getValueSet(), derivedSrc); if (baseVs == null) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+base.getPath(), "Binding "+base.getBinding().getValueSet()+" could not be located", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+base.getPath(), "Binding "+base.getBinding().getValueSet()+" could not be located", ValidationMessage.IssueSeverity.WARNING)); } else if (contextVs == null) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" could not be located", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" could not be located", ValidationMessage.IssueSeverity.WARNING)); } else { ValueSetExpansionOutcome expBase = context.expandVS(baseVs, true, false); ValueSetExpansionOutcome expDerived = context.expandVS(contextVs, true, false); if (expBase.getValueset() == null) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+base.getPath(), "Binding "+base.getBinding().getValueSet()+" could not be expanded", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+base.getPath(), "Binding "+base.getBinding().getValueSet()+" could not be expanded", ValidationMessage.IssueSeverity.WARNING)); else if (expDerived.getValueset() == null) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" could not be expanded", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" could not be expanded", ValidationMessage.IssueSeverity.WARNING)); else if (ToolingExtensions.hasExtension(expBase.getValueset().getExpansion(), ToolingExtensions.EXT_EXP_TOOCOSTLY)) { if (ToolingExtensions.hasExtension(expDerived.getValueset().getExpansion(), ToolingExtensions.EXT_EXP_TOOCOSTLY) || expDerived.getValueset().getExpansion().getContains().size() > 100) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Unable to check if "+derived.getBinding().getValueSet()+" is a proper subset of " +base.getBinding().getValueSet()+" - base value set is too large to check", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Unable to check if "+derived.getBinding().getValueSet()+" is a proper subset of " +base.getBinding().getValueSet()+" - base value set is too large to check", ValidationMessage.IssueSeverity.WARNING)); } else { boolean ok = true; for (ValueSetExpansionContainsComponent cc : expDerived.getValueset().getExpansion().getContains()) { @@ -2750,11 +2758,11 @@ public class ProfileUtilities { } } if (!ok) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" is not a subset of binding "+base.getBinding().getValueSet(), ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" is not a subset of binding "+base.getBinding().getValueSet(), ValidationMessage.IssueSeverity.ERROR)); } } } else if (!isSubset(expBase.getValueset(), expDerived.getValueset())) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" is not a subset of binding "+base.getBinding().getValueSet(), ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" is not a subset of binding "+base.getBinding().getValueSet(), ValidationMessage.IssueSeverity.ERROR)); } } ElementDefinitionBindingComponent d = derived.getBinding(); @@ -2965,11 +2973,7 @@ public class ProfileUtilities { if (tgtOk) { ok = true; } else { - if (messages == null) { - throw new FHIRException(context.formatMessage(I18nConstants.ERROR_AT__THE_TARGET_PROFILE__IS_NOT__VALID_CONSTRAINT_ON_THE_BASE_, purl, derived.getPath(), url, td.getTargetProfile())); - } else { - messages.add(new ValidationMessage(Source.InstanceValidator, IssueType.BUSINESSRULE, derived.getPath(), "The target profile " + u.getValue() + " is not a valid constraint on the base (" + td.getTargetProfile() + ") at " + derived.getPath(), IssueSeverity.ERROR)); - } + addMessage(new ValidationMessage(Source.InstanceValidator, IssueType.BUSINESSRULE, derived.getPath(), context.formatMessage(I18nConstants.ERROR_AT__THE_TARGET_PROFILE__IS_NOT__VALID_CONSTRAINT_ON_THE_BASE_, purl, derived.getPath(), url, td.getTargetProfile()), IssueSeverity.ERROR)); } } } else { @@ -2989,9 +2993,7 @@ public class ProfileUtilities { } StructureDefinition sd = context.fetchResource(StructureDefinition.class, url); if (sd == null) { - if (messages != null) { - messages.add(new ValidationMessage(Source.InstanceValidator, IssueType.BUSINESSRULE, path, "Cannot check whether the target profile " + url + " on "+dPath+" is valid constraint on the base because it is not known", IssueSeverity.WARNING)); - } + addMessage(new ValidationMessage(Source.InstanceValidator, IssueType.BUSINESSRULE, path, "Cannot check whether the target profile " + url + " on "+dPath+" is valid constraint on the base because it is not known", IssueSeverity.WARNING)); return true; } else { if (sd.hasBaseDefinition() && sdConformsToTargets(path, dPath, sd.getBaseDefinition(), td)) { @@ -3022,7 +3024,7 @@ public class ProfileUtilities { } if (!ok) { - messages.add(new ValidationMessage(Source.InstanceValidator, IssueType.CONFLICT, dest.getId(), "The "+fieldName+" value has type '"+ft+"' which is not valid (valid "+Utilities.pluralize("type", dest.getType().size())+": "+types.toString()+")", IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.InstanceValidator, IssueType.CONFLICT, dest.getId(), "The "+fieldName+" value has type '"+ft+"' which is not valid (valid "+Utilities.pluralize("type", dest.getType().size())+": "+types.toString()+")", IssueSeverity.ERROR)); } } @@ -3936,10 +3938,7 @@ public class ProfileUtilities { } ed.setId(bs); if (idList.containsKey(bs)) { - if (exception || messages == null) { - throw new DefinitionException(context.formatMessage(I18nConstants.SAME_ID_ON_MULTIPLE_ELEMENTS__IN_, bs, idList.get(bs), ed.getPath(), name)); - } else - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, name+"."+bs, "Duplicate Element id "+bs, ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, name+"."+bs, context.formatMessage(I18nConstants.SAME_ID_ON_MULTIPLE_ELEMENTS__IN_, bs, idList.get(bs), ed.getPath(), name), ValidationMessage.IssueSeverity.ERROR)); } idList.put(bs, ed.getPath()); if (ed.hasContentReference() && ed.getContentReference().startsWith("#")) { @@ -4315,12 +4314,12 @@ public class ProfileUtilities { public boolean isThrowException() { - return exception; + return wantThrowExceptions; } public void setThrowException(boolean exception) { - this.exception = exception; + this.wantThrowExceptions = exception; } @@ -4578,7 +4577,9 @@ public class ProfileUtilities { } public void setMessages(List messages) { - this.messages = messages; + if (messages != null) { + this.messages = messages; + } } private Map> propertyCache = new HashMap<>(); From dd01e008ca6fdc4742293f38a9c99d77c7e33d74 Mon Sep 17 00:00:00 2001 From: dotasek Date: Sun, 15 Sep 2024 10:01:53 -0400 Subject: [PATCH 10/68] Revert "Merge pull request #1649 from hapifhir/do-20240606-fix-classname-typo" This reverts commit 0c7e6ce9ac037170ff5af169fbade1e0232321e0, reversing changes made to bfed8a15d535dc040a92931baddc0457568ea379. --- .../resources30_40/Consent30_40.java | 13 +-- .../resources40_50/Consent40_50.java | 9 +- .../org/hl7/fhir/r4/formats/RdfParser.java | 2 +- .../org/hl7/fhir/r4/formats/XmlParser.java | 12 +- .../java/org/hl7/fhir/r4/model/Consent.java | 104 +++++++++--------- 5 files changed, 69 insertions(+), 71 deletions(-) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java index eaf5aba5a..1c783f74c 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java @@ -13,7 +13,6 @@ import org.hl7.fhir.convertors.conv30_40.datatypes30_40.primitivetypes30_40.Date import org.hl7.fhir.convertors.conv30_40.datatypes30_40.primitivetypes30_40.Uri30_40; import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.r4.model.CodeableConcept; -import org.hl7.fhir.r4.model.Consent; import org.hl7.fhir.r4.model.Identifier; public class Consent30_40 { @@ -48,7 +47,7 @@ public class Consent30_40 { tgt.setPolicyRule(new CodeableConcept(c)); } if (src.hasSecurityLabel() || src.hasPeriod() || src.hasActor() || src.hasAction() || src.hasPurpose() || src.hasDataPeriod() || src.hasData() || src.hasExcept()) { - Consent.ProvisionComponent pc = new Consent.ProvisionComponent(); + org.hl7.fhir.r4.model.Consent.provisionComponent pc = new org.hl7.fhir.r4.model.Consent.provisionComponent(); if (src.hasPeriod()) pc.setPeriod(Period30_40.convertPeriod(src.getPeriod())); for (org.hl7.fhir.dstu3.model.Consent.ConsentActorComponent t : src.getActor()) @@ -105,7 +104,7 @@ public class Consent30_40 { } } if (src.hasProvision()) { - Consent.ProvisionComponent p = src.getProvision(); + org.hl7.fhir.r4.model.Consent.provisionComponent p = src.getProvision(); if (p.hasPeriod()) tgt.setPeriod(Period30_40.convertPeriod(p.getPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionActorComponent t : p.getActor()) @@ -118,7 +117,7 @@ public class Consent30_40 { tgt.setDataPeriod(Period30_40.convertPeriod(p.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : p.getData()) tgt.addData(convertConsentDataComponent(t)); - for (Consent.ProvisionComponent t : p.getProvision()) + for (org.hl7.fhir.r4.model.Consent.provisionComponent t : p.getProvision()) tgt.addExcept(convertExceptComponent(t)); } return tgt; @@ -370,7 +369,7 @@ public class Consent30_40 { return tgt; } - static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(Consent.ProvisionComponent src) throws FHIRException { + static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.dstu3.model.Consent.ExceptComponent tgt = new org.hl7.fhir.dstu3.model.Consent.ExceptComponent(); @@ -394,10 +393,10 @@ public class Consent30_40 { return tgt; } - static public Consent.ProvisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { + static public org.hl7.fhir.r4.model.Consent.provisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { if (src == null) return null; - Consent.ProvisionComponent tgt = new Consent.ProvisionComponent(); + org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); ConversionContext30_40.INSTANCE.getVersionConvertor_30_40().copyBackboneElement(src,tgt); if (src.hasType()) tgt.setTypeElement(convertConsentExceptType(src.getTypeElement())); diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java index d5fa94f0f..0fe389de5 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java @@ -10,7 +10,6 @@ import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Boolean40 import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.DateTime40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.special40_50.Reference40_50; import org.hl7.fhir.exceptions.FHIRException; -import org.hl7.fhir.r4.model.Consent; /* Copyright (c) 2011+, HL7, Inc. @@ -221,7 +220,7 @@ public class Consent40_50 { return tgt; } - public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(Consent.ProvisionComponent src) throws FHIRException { + public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.r5.model.Consent.ProvisionComponent tgt = new org.hl7.fhir.r5.model.Consent.ProvisionComponent(); @@ -243,15 +242,15 @@ public class Consent40_50 { tgt.setDataPeriod(Period40_50.convertPeriod(src.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : src.getData()) tgt.addData(convertprovisionDataComponent(t)); - for (Consent.ProvisionComponent t : src.getProvision()) + for (org.hl7.fhir.r4.model.Consent.provisionComponent t : src.getProvision()) tgt.addProvision(convertprovisionComponent(t)); return tgt; } - public static Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { + public static org.hl7.fhir.r4.model.Consent.provisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; - Consent.ProvisionComponent tgt = new Consent.ProvisionComponent(); + org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt); // if (src.hasType()) // tgt.setTypeElement(convertConsentProvisionType(src.getTypeElement())); diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java index ee7a21d82..e09127adc 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java @@ -4917,7 +4917,7 @@ public class RdfParser extends RdfParserBase { } protected void composeConsentprovisionComponent(Complex parent, String parentType, String name, - Consent.ProvisionComponent element, int index) { + Consent.provisionComponent element, int index) { if (element == null) return; Complex t; diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java index 6c46487ea..7ccf6fdd6 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java @@ -6924,9 +6924,9 @@ public class XmlParser extends XmlParserBase { return true; } - protected Consent.ProvisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) + protected Consent.provisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) throws XmlPullParserException, IOException, FHIRFormatError { - Consent.ProvisionComponent res = new Consent.ProvisionComponent(); + Consent.provisionComponent res = new Consent.provisionComponent(); parseBackboneAttributes(xpp, res); next(xpp); int eventType = nextNoWhitespace(xpp); @@ -6941,7 +6941,7 @@ public class XmlParser extends XmlParserBase { } protected boolean parseConsentprovisionComponentContent(int eventType, XmlPullParser xpp, Consent owner, - Consent.ProvisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { + Consent.provisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("type")) { res.setTypeElement( parseEnumeration(xpp, Consent.ConsentProvisionType.NULL, new Consent.ConsentProvisionTypeEnumFactory())); @@ -34008,7 +34008,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponent(String name, Consent.ProvisionComponent element) throws IOException { + protected void composeConsentprovisionComponent(String name, Consent.provisionComponent element) throws IOException { if (element != null) { composeElementAttributes(element); xml.enter(FHIR_NS, name); @@ -34018,7 +34018,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponentElements(Consent.ProvisionComponent element) throws IOException { + protected void composeConsentprovisionComponentElements(Consent.provisionComponent element) throws IOException { composeBackboneElementElements(element); if (element.hasTypeElement()) composeEnumeration("type", element.getTypeElement(), new Consent.ConsentProvisionTypeEnumFactory()); @@ -34057,7 +34057,7 @@ public class XmlParser extends XmlParserBase { composeConsentprovisionDataComponent("data", e); } if (element.hasProvision()) { - for (Consent.ProvisionComponent e : element.getProvision()) + for (Consent.provisionComponent e : element.getProvision()) composeConsentprovisionComponent("provision", e); } } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java index eb2e25345..1560c3f27 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java @@ -1221,7 +1221,7 @@ public class Consent extends DomainResource { } @Block() - public static class ProvisionComponent extends BackboneElement implements IBaseBackboneElement { + public static class provisionComponent extends BackboneElement implements IBaseBackboneElement { /** * Action to take - permit or deny - when the rule conditions are met. Not * permitted in root rule, required in all nested rules. @@ -1314,16 +1314,16 @@ public class Consent extends DomainResource { * Rules which provide exceptions to the base rule or subrules. */ @Child(name = "provision", type = { - ProvisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) + provisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) @Description(shortDefinition = "Nested Exception Rules", formalDefinition = "Rules which provide exceptions to the base rule or subrules.") - protected List provision; + protected List provision; private static final long serialVersionUID = -1280172451L; /** * Constructor */ - public ProvisionComponent() { + public provisionComponent() { super(); } @@ -1357,7 +1357,7 @@ public class Consent extends DomainResource { * extensions. The accessor "getType" gives direct access to the * value */ - public ProvisionComponent setTypeElement(Enumeration value) { + public provisionComponent setTypeElement(Enumeration value) { this.type = value; return this; } @@ -1374,7 +1374,7 @@ public class Consent extends DomainResource { * @param value Action to take - permit or deny - when the rule conditions are * met. Not permitted in root rule, required in all nested rules. */ - public ProvisionComponent setType(ConsentProvisionType value) { + public provisionComponent setType(ConsentProvisionType value) { if (value == null) this.type = null; else { @@ -1404,7 +1404,7 @@ public class Consent extends DomainResource { /** * @param value {@link #period} (The timeframe in this rule is valid.) */ - public ProvisionComponent setPeriod(Period value) { + public provisionComponent setPeriod(Period value) { this.period = value; return this; } @@ -1423,7 +1423,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setActor(List theActor) { + public provisionComponent setActor(List theActor) { this.actor = theActor; return this; } @@ -1445,7 +1445,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addActor(provisionActorComponent t) { // 3 + public provisionComponent addActor(provisionActorComponent t) { // 3 if (t == null) return this; if (this.actor == null) @@ -1477,7 +1477,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setAction(List theAction) { + public provisionComponent setAction(List theAction) { this.action = theAction; return this; } @@ -1499,7 +1499,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addAction(CodeableConcept t) { // 3 + public provisionComponent addAction(CodeableConcept t) { // 3 if (t == null) return this; if (this.action == null) @@ -1533,7 +1533,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setSecurityLabel(List theSecurityLabel) { + public provisionComponent setSecurityLabel(List theSecurityLabel) { this.securityLabel = theSecurityLabel; return this; } @@ -1555,7 +1555,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addSecurityLabel(Coding t) { // 3 + public provisionComponent addSecurityLabel(Coding t) { // 3 if (t == null) return this; if (this.securityLabel == null) @@ -1589,7 +1589,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setPurpose(List thePurpose) { + public provisionComponent setPurpose(List thePurpose) { this.purpose = thePurpose; return this; } @@ -1611,7 +1611,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addPurpose(Coding t) { // 3 + public provisionComponent addPurpose(Coding t) { // 3 if (t == null) return this; if (this.purpose == null) @@ -1646,7 +1646,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setClass_(List theClass_) { + public provisionComponent setClass_(List theClass_) { this.class_ = theClass_; return this; } @@ -1668,7 +1668,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addClass_(Coding t) { // 3 + public provisionComponent addClass_(Coding t) { // 3 if (t == null) return this; if (this.class_ == null) @@ -1701,7 +1701,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setCode(List theCode) { + public provisionComponent setCode(List theCode) { this.code = theCode; return this; } @@ -1723,7 +1723,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addCode(CodeableConcept t) { // 3 + public provisionComponent addCode(CodeableConcept t) { // 3 if (t == null) return this; if (this.code == null) @@ -1764,7 +1764,7 @@ public class Consent extends DomainResource { * @param value {@link #dataPeriod} (Clinical or Operational Relevant period of * time that bounds the data controlled by this rule.) */ - public ProvisionComponent setDataPeriod(Period value) { + public provisionComponent setDataPeriod(Period value) { this.dataPeriod = value; return this; } @@ -1782,7 +1782,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setData(List theData) { + public provisionComponent setData(List theData) { this.data = theData; return this; } @@ -1804,7 +1804,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addData(provisionDataComponent t) { // 3 + public provisionComponent addData(provisionDataComponent t) { // 3 if (t == null) return this; if (this.data == null) @@ -1828,16 +1828,16 @@ public class Consent extends DomainResource { * @return {@link #provision} (Rules which provide exceptions to the base rule * or subrules.) */ - public List getProvision() { + public List getProvision() { if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); return this.provision; } /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setProvision(List theProvision) { + public provisionComponent setProvision(List theProvision) { this.provision = theProvision; return this; } @@ -1845,25 +1845,25 @@ public class Consent extends DomainResource { public boolean hasProvision() { if (this.provision == null) return false; - for (ProvisionComponent item : this.provision) + for (provisionComponent item : this.provision) if (!item.isEmpty()) return true; return false; } - public ProvisionComponent addProvision() { // 3 - ProvisionComponent t = new ProvisionComponent(); + public provisionComponent addProvision() { // 3 + provisionComponent t = new provisionComponent(); if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return t; } - public ProvisionComponent addProvision(ProvisionComponent t) { // 3 + public provisionComponent addProvision(provisionComponent t) { // 3 if (t == null) return this; if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return this; } @@ -1872,7 +1872,7 @@ public class Consent extends DomainResource { * @return The first repetition of repeating field {@link #provision}, creating * it if it does not already exist */ - public ProvisionComponent getProvisionFirstRep() { + public provisionComponent getProvisionFirstRep() { if (getProvision().isEmpty()) { addProvision(); } @@ -2027,7 +2027,7 @@ public class Consent extends DomainResource { this.getData().add((provisionDataComponent) value); // provisionDataComponent return value; case -547120939: // provision - this.getProvision().add((ProvisionComponent) value); // provisionComponent + this.getProvision().add((provisionComponent) value); // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -2059,7 +2059,7 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().add((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().add((ProvisionComponent) value); + this.getProvision().add((provisionComponent) value); } else return super.setProperty(name, value); return value; @@ -2088,7 +2088,7 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().remove((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().remove((ProvisionComponent) value); + this.getProvision().remove((provisionComponent) value); } else super.removeChild(name, value); @@ -2186,13 +2186,13 @@ public class Consent extends DomainResource { return super.addChild(name); } - public ProvisionComponent copy() { - ProvisionComponent dst = new ProvisionComponent(); + public provisionComponent copy() { + provisionComponent dst = new provisionComponent(); copyValues(dst); return dst; } - public void copyValues(ProvisionComponent dst) { + public void copyValues(provisionComponent dst) { super.copyValues(dst); dst.type = type == null ? null : type.copy(); dst.period = period == null ? null : period.copy(); @@ -2240,8 +2240,8 @@ public class Consent extends DomainResource { } ; if (provision != null) { - dst.provision = new ArrayList(); - for (ProvisionComponent i : provision) + dst.provision = new ArrayList(); + for (provisionComponent i : provision) dst.provision.add(i.copy()); } ; @@ -2251,9 +2251,9 @@ public class Consent extends DomainResource { public boolean equalsDeep(Base other_) { if (!super.equalsDeep(other_)) return false; - if (!(other_ instanceof ProvisionComponent)) + if (!(other_ instanceof provisionComponent)) return false; - ProvisionComponent o = (ProvisionComponent) other_; + provisionComponent o = (provisionComponent) other_; return compareDeep(type, o.type, true) && compareDeep(period, o.period, true) && compareDeep(actor, o.actor, true) && compareDeep(action, o.action, true) && compareDeep(securityLabel, o.securityLabel, true) && compareDeep(purpose, o.purpose, true) && compareDeep(class_, o.class_, true) @@ -2265,9 +2265,9 @@ public class Consent extends DomainResource { public boolean equalsShallow(Base other_) { if (!super.equalsShallow(other_)) return false; - if (!(other_ instanceof ProvisionComponent)) + if (!(other_ instanceof provisionComponent)) return false; - ProvisionComponent o = (ProvisionComponent) other_; + provisionComponent o = (provisionComponent) other_; return compareValues(type, o.type, true); } @@ -3002,7 +3002,7 @@ public class Consent extends DomainResource { */ @Child(name = "provision", type = {}, order = 12, min = 0, max = 1, modifier = false, summary = true) @Description(shortDefinition = "Constraints to the base Consent.policyRule", formalDefinition = "An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.") - protected ProvisionComponent provision; + protected provisionComponent provision; private static final long serialVersionUID = 206528051L; @@ -3669,12 +3669,12 @@ public class Consent extends DomainResource { * @return {@link #provision} (An exception to the base policy of this consent. * An exception can be an addition or removal of access permissions.) */ - public ProvisionComponent getProvision() { + public provisionComponent getProvision() { if (this.provision == null) if (Configuration.errorOnAutoCreate()) throw new Error("Attempt to auto-create Consent.provision"); else if (Configuration.doAutoCreate()) - this.provision = new ProvisionComponent(); // cc + this.provision = new provisionComponent(); // cc return this.provision; } @@ -3687,7 +3687,7 @@ public class Consent extends DomainResource { * consent. An exception can be an addition or removal of access * permissions.) */ - public Consent setProvision(ProvisionComponent value) { + public Consent setProvision(provisionComponent value) { this.provision = value; return this; } @@ -3883,7 +3883,7 @@ public class Consent extends DomainResource { this.getVerification().add((ConsentVerificationComponent) value); // ConsentVerificationComponent return value; case -547120939: // provision - this.provision = (ProvisionComponent) value; // provisionComponent + this.provision = (provisionComponent) value; // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -3919,7 +3919,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().add((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (ProvisionComponent) value; // provisionComponent + this.provision = (provisionComponent) value; // provisionComponent } else return super.setProperty(name, value); return value; @@ -3952,7 +3952,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().remove((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (ProvisionComponent) value; // provisionComponent + this.provision = (provisionComponent) value; // provisionComponent } else super.removeChild(name, value); @@ -4064,7 +4064,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { return addVerification(); } else if (name.equals("provision")) { - this.provision = new ProvisionComponent(); + this.provision = new provisionComponent(); return this.provision; } else return super.addChild(name); From 0d8c5942e799ad718dc1e5e688064cf02c17434b Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 17 Sep 2024 14:11:13 +0800 Subject: [PATCH 11/68] Fix rendering path for value set references for kindling --- .../main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java index 4a78a67c8..16adae09a 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java @@ -750,9 +750,9 @@ public class ValueSetRenderer extends TerminologyRenderer { if (cs == null) { return "?cs-n?"; } - String ref = (String) cs.getUserData("filename"); + String ref = cs.getWebPath(); if (ref == null) { - ref = (String) cs.getWebPath(); + ref = cs.getUserString("filename"); } return ref == null ? null : ref.replace("\\", "/"); } From 11efed6635c40f077924c7650b301fe5981bb9dd Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 17 Sep 2024 16:16:09 +0800 Subject: [PATCH 12/68] Validation of experimental property --- .../fhir/utilities/i18n/I18nConstants.java | 3 +++ .../src/main/resources/Messages.properties | 4 +++- .../hl7/fhir/validation/ValidationEngine.java | 2 ++ .../fhir/validation/cli/model/CliContext.java | 18 +++++++++++++- .../cli/services/ValidationService.java | 1 + .../hl7/fhir/validation/cli/utils/Params.java | 5 +++- .../instance/InstanceValidator.java | 13 ++++++++++ .../type/StructureDefinitionValidator.java | 24 ++++++++++++------- .../validation/tests/ValidationTests.java | 3 +++ 9 files changed, 62 insertions(+), 11 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java index db81c97c3..e8af42a88 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java @@ -1108,4 +1108,7 @@ public class I18nConstants { public static final String SM_TARGET_TYPE_UNKNOWN = "SM_TARGET_TYPE_UNKNOWN"; public static final String XHTML_XHTML_ATTRIBUTE_XML_SPACE = "XHTML_XHTML_ATTRIBUTE_XML_SPACE"; public static final String VALIDATION_HL7_PUBLISHER_MULTIPLE_WGS = "VALIDATION_HL7_PUBLISHER_MULTIPLE_WGS"; + public static final String SD_BASE_EXPERIMENTAL = "SD_BASE_EXPERIMENTAL"; + public static final String SD_ED_EXPERIMENTAL_BINDING = "SD_ED_EXPERIMENTAL_BINDING"; + public static final String VALIDATION_NO_EXPERIMENTAL_CONTENT = "VALIDATION_NO_EXPERIMENTAL_CONTENT"; } diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages.properties b/org.hl7.fhir.utilities/src/main/resources/Messages.properties index bae41d4af..35811c33e 100644 --- a/org.hl7.fhir.utilities/src/main/resources/Messages.properties +++ b/org.hl7.fhir.utilities/src/main/resources/Messages.properties @@ -1140,4 +1140,6 @@ XHTML_XHTML_ATTRIBUTE_XML_SPACE = The attribute 'xml:space' is legal but has a f VALIDATION_HL7_PUBLISHER_MULTIPLE_WGS = This resource has more than workgroup extension (http://hl7.org/fhir/StructureDefinition/structuredefinition-wg) NO_VALID_DISPLAY_FOUND_NONE_FOR_LANG = Wrong Display Name ''{0}'' for {1}#{2}. There are no valid display names found for language(s) ''{3}''. Default display is ''{4}'' NO_VALID_DISPLAY_AT_ALL = Cannot validate display Name ''{0}'' for {1}#{2}: No displays are known - +SD_BASE_EXPERIMENTAL = The definition builds on ''{0}'' which is experimental, but this definition is not labeled as experimental +SD_ED_EXPERIMENTAL_BINDING = The definition for the element ''{0}'' binds to the value set ''{1}'' which is experimental, but this structure is not labeled as experimental +VALIDATION_NO_EXPERIMENTAL_CONTENT = Experimental content is not allowed in this context diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java index 9bf88787c..46f5d948b 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java @@ -227,6 +227,7 @@ public class ValidationEngine implements IValidatorResourceFetcher, IValidationP @Getter @Setter private boolean checkIPSCodes; @Getter @Setter private BestPracticeWarningLevel bestPracticeLevel; @Getter @Setter private boolean unknownCodeSystemsCauseErrors; + @Getter @Setter private boolean noExperimentalContent; @Getter @Setter private Locale locale; @Getter @Setter private List igs = new ArrayList<>(); @Getter @Setter private List extensionDomains = new ArrayList<>(); @@ -909,6 +910,7 @@ public class ValidationEngine implements IValidatorResourceFetcher, IValidationP validator.setPolicyAdvisor(policyAdvisor); } validator.setUnknownCodeSystemsCauseErrors(unknownCodeSystemsCauseErrors); + validator.setNoExperimentalContent(noExperimentalContent); return validator; } 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 79c604c6c..418526071 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 @@ -165,6 +165,9 @@ public class CliContext { @JsonProperty("unknownCodeSystemsCauseErrors") private boolean unknownCodeSystemsCauseErrors; + + @JsonProperty("noExperimentalContent") + private boolean noExperimentalContent; @JsonProperty("baseEngine") public String getBaseEngine() { @@ -836,6 +839,7 @@ public class CliContext { Objects.equals(bestPracticeLevel, that.bestPracticeLevel) && Objects.equals(watchScanDelay, that.watchScanDelay) && Objects.equals(unknownCodeSystemsCauseErrors, that.unknownCodeSystemsCauseErrors) && + Objects.equals(noExperimentalContent, that.noExperimentalContent) && Objects.equals(watchSettleTime, that.watchSettleTime) ; } @@ -844,7 +848,7 @@ public class CliContext { return Objects.hash(baseEngine, doNative, extensions, hintAboutNonMustSupport, recursive, doDebug, assumeValidRestReferences, canDoNative, noInternalCaching, noExtensibleBindingMessages, noInvariants, displayWarnings, wantInvariantsInMessages, map, output, outputSuffix, htmlOutput, txServer, sv, txLog, txCache, mapLog, lang, srcLang, tgtLang, fhirpath, snomedCT, targetVer, igs, questionnaireMode, level, profiles, sources, inputs, mode, locale, locations, crumbTrails, forPublication, showTimes, allowExampleUrls, outputStyle, jurisdiction, noUnicodeBiDiControlChars, - watchMode, watchScanDelay, watchSettleTime, bestPracticeLevel, unknownCodeSystemsCauseErrors, htmlInMarkdownCheck, allowDoubleQuotesInFHIRPath, checkIPSCodes); + watchMode, watchScanDelay, watchSettleTime, bestPracticeLevel, unknownCodeSystemsCauseErrors, noExperimentalContent, htmlInMarkdownCheck, allowDoubleQuotesInFHIRPath, checkIPSCodes); } @Override @@ -904,6 +908,7 @@ public class CliContext { ", watchSettleTime=" + watchSettleTime + ", watchScanDelay=" + watchScanDelay + ", unknownCodeSystemsCauseErrors=" + unknownCodeSystemsCauseErrors + + ", noExperimentalContent=" + noExperimentalContent + '}'; } @@ -973,5 +978,16 @@ public class CliContext { this.unknownCodeSystemsCauseErrors = unknownCodeSystemsCauseErrors; } + @JsonProperty("noExperimentalContent") + public boolean isNoExperimentalContent() { + return noExperimentalContent; + } + + + @JsonProperty("noExperimentalContent") + public void setNoExperimentalContent(boolean noExperimentalContent) { + this.noExperimentalContent = noExperimentalContent; + } + } \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java index 61d4b7d5f..82abdff63 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java @@ -582,6 +582,7 @@ public class ValidationService { validationEngine.getBundleValidationRules().addAll(cliContext.getBundleValidationRules()); validationEngine.setJurisdiction(CodeSystemUtilities.readCoding(cliContext.getJurisdiction())); validationEngine.setUnknownCodeSystemsCauseErrors(cliContext.isUnknownCodeSystemsCauseErrors()); + validationEngine.setNoExperimentalContent(cliContext.isNoExperimentalContent()); TerminologyCache.setNoCaching(cliContext.isNoInternalCaching()); validationEngine.prepare(); // generate any missing snapshots System.out.println(" go (" + timeTracker.milestone() + ")"); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Params.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Params.java index 0983d0072..0b220f5f8 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Params.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Params.java @@ -94,7 +94,8 @@ public class Params { public static final String DISABLE_DEFAULT_RESOURCE_FETCHER = "-disable-default-resource-fetcher"; public static final String CHECK_IPS_CODES = "-check-ips-codes"; public static final String BEST_PRACTICE = "-best-practice"; - public static final String UNKNOWN_CODESYSTEMS_CAUSE_ERROR = "-unknown-codesystems-cause-errors"; + public static final String UNKNOWN_CODESYSTEMS_CAUSE_ERROR = "-unknown-codesystems-cause-errors"; + public static final String NO_EXPERIMENTAL_CONTENT = "-no-experimental-content"; public static final String RUN_TESTS = "-run-tests"; @@ -321,6 +322,8 @@ public class Params { cliContext.setForPublication(true); } else if (args[i].equals(UNKNOWN_CODESYSTEMS_CAUSE_ERROR)) { cliContext.setUnknownCodeSystemsCauseErrors(true); + } else if (args[i].equals(NO_EXPERIMENTAL_CONTENT)) { + cliContext.setNoExperimentalContent(true); } else if (args[i].equals(VERBOSE)) { cliContext.setCrumbTrails(true); } else if (args[i].equals(ALLOW_EXAMPLE_URLS)) { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java index dbc8eb164..96c72324a 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java @@ -599,6 +599,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat private IDigitalSignatureServices signatureServices; private ContextUtilities cu; private boolean unknownCodeSystemsCauseErrors; + private boolean noExperimentalContent; public InstanceValidator(@Nonnull IWorkerContext theContext, @Nonnull IEvaluationContext hostServices, @Nonnull XVerExtensionManager xverManager) { super(theContext, xverManager, false); @@ -5718,6 +5719,10 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat hint(errors, "2023-08-14", IssueType.BUSINESSRULE, element.line(), element.col(), stack.getLiteralPath(), statusCodesDeeplyConsistent(status, standardsStatus), I18nConstants.VALIDATION_VAL_STATUS_INCONSISTENT_HINT, status, standardsStatus); } } + if (noExperimentalContent) { + String exp = element.getNamedChildValue("experimental"); + ok = rule(errors, "2024-09-17", IssueType.BUSINESSRULE, element.line(), element.col(), stack.getLiteralPath(), !"true".equals(exp), I18nConstants.VALIDATION_NO_EXPERIMENTAL_CONTENT) && ok; + } if (isHL7Core(element) && !isExample()) { ok = checkPublisherConsistency(valContext, errors, element, stack, contained) && ok; @@ -7839,6 +7844,14 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat public void setUnknownCodeSystemsCauseErrors(boolean unknownCodeSystemsCauseErrors) { this.unknownCodeSystemsCauseErrors = unknownCodeSystemsCauseErrors; } + + public boolean isNoExperimentalContent() { + return noExperimentalContent; + } + + public void setNoExperimentalContent(boolean noExperimentalContent) { + this.noExperimentalContent = noExperimentalContent; + } } diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java index 09f0be183..0df6dd68f 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java @@ -85,6 +85,7 @@ public class StructureDefinitionValidator extends BaseValidator { List snapshot = sd.getSnapshot().getElement(); sd.setSnapshot(null); typeName = sd.getTypeName(); + boolean experimental = "true".equals(src.getNamedChildValue("experimental", false)); StructureDefinition base = context.fetchResource(StructureDefinition.class, sd.getBaseDefinition()); if (warning(errors, NO_RULE_DATE, IssueType.NOTFOUND, stack.getLiteralPath(), base != null, I18nConstants.UNABLE_TO_FIND_BASE__FOR_, sd.getBaseDefinition(), "StructureDefinition, so can't check the differential")) { if (rule(errors, NO_RULE_DATE, IssueType.NOTFOUND, stack.getLiteralPath(), sd.hasDerivation(), I18nConstants.SD_MUST_HAVE_DERIVATION, sd.getUrl())) { @@ -129,6 +130,7 @@ public class StructureDefinitionValidator extends BaseValidator { ok = rule(errors, "2022-11-02", IssueType.NOTFOUND, stack.getLiteralPath(), base.getKindElement().primitiveValue().equals(src.getChildValue("kind")), I18nConstants.SD_DERIVATION_KIND_MISMATCH, base.getKindElement().primitiveValue(), src.getChildValue("kind")) && ok; } + warning(errors, "2024-09-17", IssueType.BUSINESSRULE, stack.getLiteralPath(), !base.getExperimental() || experimental, I18nConstants.SD_BASE_EXPERIMENTAL, sd.getBaseDefinition()); } List differentials = src.getChildrenByName("differential"); @@ -136,10 +138,10 @@ public class StructureDefinitionValidator extends BaseValidator { boolean logical = "logical".equals(src.getNamedChildValue("kind", false)); boolean constraint = "constraint".equals(src.getNamedChildValue("derivation", false)); for (Element differential : differentials) { - ok = validateElementList(errors, differential, stack.push(differential, -1, null, null), false, snapshots.size() > 0, sd, typeName, logical, constraint, src.getNamedChildValue("type", false), src.getNamedChildValue("url", false), src.getNamedChildValue("type", false), base) && ok; + ok = validateElementList(errors, differential, stack.push(differential, -1, null, null), false, snapshots.size() > 0, sd, typeName, logical, constraint, src.getNamedChildValue("type", false), src.getNamedChildValue("url", false), src.getNamedChildValue("type", false), base, experimental) && ok; } for (Element snapshotE : snapshots) { - ok = validateElementList(errors, snapshotE, stack.push(snapshotE, -1, null, null), true, true, sd, typeName, logical, constraint, src.getNamedChildValue("type", false), src.getNamedChildValue("url", false), src.getNamedChildValue("type", false), base) && ok; + ok = validateElementList(errors, snapshotE, stack.push(snapshotE, -1, null, null), true, true, sd, typeName, logical, constraint, src.getNamedChildValue("type", false), src.getNamedChildValue("url", false), src.getNamedChildValue("type", false), base, experimental) && ok; } // obligation profile support @@ -189,6 +191,7 @@ public class StructureDefinitionValidator extends BaseValidator { } } } catch (Exception e) { + e.printStackTrace(); rule(errors, NO_RULE_DATE, IssueType.EXCEPTION, stack.getLiteralPath(), false, I18nConstants.ERROR_GENERATING_SNAPSHOT, e.getMessage()); ok = false; } @@ -409,19 +412,19 @@ public class StructureDefinitionValidator extends BaseValidator { } } - private boolean validateElementList(List errors, Element elementList, NodeStack stack, boolean snapshot, boolean hasSnapshot, StructureDefinition sd, String typeName, boolean logical, boolean constraint, String rootPath, String profileUrl, String profileType, StructureDefinition base) { + private boolean validateElementList(List errors, Element elementList, NodeStack stack, boolean snapshot, boolean hasSnapshot, StructureDefinition sd, String typeName, boolean logical, boolean constraint, String rootPath, String profileUrl, String profileType, StructureDefinition base, boolean experimental) { Map invariantMap = new HashMap<>(); boolean ok = true; List elements = elementList.getChildrenByName("element"); int cc = 0; for (Element element : elements) { - ok = validateElementDefinition(errors, elements, element, stack.push(element, cc, null, null), snapshot, hasSnapshot, sd, typeName, logical, constraint, invariantMap, rootPath, profileUrl, profileType, base) && ok; + ok = validateElementDefinition(errors, elements, element, stack.push(element, cc, null, null), snapshot, hasSnapshot, sd, typeName, logical, constraint, invariantMap, rootPath, profileUrl, profileType, base, experimental) && ok; cc++; } return ok; } - private boolean validateElementDefinition(List errors, List elements, Element element, NodeStack stack, boolean snapshot, boolean hasSnapshot, StructureDefinition sd, String typeName, boolean logical, boolean constraint, Map invariantMap, String rootPath, String profileUrl, String profileType, StructureDefinition base) { + private boolean validateElementDefinition(List errors, List elements, Element element, NodeStack stack, boolean snapshot, boolean hasSnapshot, StructureDefinition sd, String typeName, boolean logical, boolean constraint, Map invariantMap, String rootPath, String profileUrl, String profileType, StructureDefinition base, boolean experimental) { boolean ok = true; boolean typeMustSupport = false; String path = element.getNamedChildValue("path", false); @@ -522,7 +525,7 @@ public class StructureDefinitionValidator extends BaseValidator { ok = rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), characteristics.contains("can-bind") , I18nConstants.SD_ILLEGAL_CHARACTERISTICS, "Binding", typeCodes) && ok; } Element binding = element.getNamedChild("binding", false); - ok = validateBinding(errors, binding, stack.push(binding, -1, null, null), typeCodes, snapshot, path) && ok; + ok = validateBinding(errors, binding, stack.push(binding, -1, null, null), typeCodes, snapshot, path, experimental) && ok; } else { // this is a good idea but there's plenty of cases where the rule isn't met; maybe one day it's worth investing the time to exclude these cases and bring this rule back // String bt = boundType(typeCodes); @@ -986,7 +989,7 @@ public class StructureDefinitionValidator extends BaseValidator { return null; } - private boolean validateBinding(List errors, Element binding, NodeStack stack, Set typeCodes, boolean snapshot, String path) { + private boolean validateBinding(List errors, Element binding, NodeStack stack, Set typeCodes, boolean snapshot, String path, boolean experimental) { boolean ok = true; if (bindableType(typeCodes) == null) { ok = rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), !snapshot, I18nConstants.SD_ED_BIND_NO_BINDABLE, path, typeCodes.toString()) && ok; @@ -1006,7 +1009,12 @@ public class StructureDefinitionValidator extends BaseValidator { if (warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs != null || serverSupportsValueSet(ref), I18nConstants.SD_ED_BIND_UNKNOWN_VS, path, ref)) { if (vs != null) { - ok = rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs instanceof ValueSet, I18nConstants.SD_ED_BIND_NOT_VS, path, ref, vs.fhirType()) && ok; + if (rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs instanceof ValueSet, I18nConstants.SD_ED_BIND_NOT_VS, path, ref, vs.fhirType())) { + ValueSet vsr = (ValueSet) vs; + warning(errors, "2024-09-17", IssueType.BUSINESSRULE, stack.getLiteralPath(), !vsr.getExperimental() || experimental, I18nConstants.SD_ED_EXPERIMENTAL_BINDING, path, ref); + } else { + ok = false; + } } } } diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java index 880fb2f9c..c43b88da0 100644 --- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java @@ -362,6 +362,9 @@ public class ValidationTests implements IEvaluationContext, IValidatorResourceFe if (content.has("security-checks")) { val.setSecurityChecks(content.get("security-checks").getAsBoolean()); } + if (content.has("no-experimental-content")) { + val.setNoExperimentalContent(content.get("no-experimental-content").getAsBoolean()); + } if (content.has("noHtmlInMarkdown")) { val.setHtmlInMarkdownCheck(HtmlInMarkdownCheck.ERROR); } From ded7bc0ffdd59bdc1c5074c68e8965d13463989a Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 17 Sep 2024 16:20:22 +0800 Subject: [PATCH 13/68] release notes --- RELEASE_NOTES.md | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index f9e202bce..ce6a47dee 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,18 +1,13 @@ ## Validator Changes -* Fix expression for con-3 properly (fix validation problem on some condition resources) -* Fix FHIRPath bug using wrong type on simple elements when checking FHIRPath types -* FHIRPath: Allow _ in constant names (per FHIRPath spec) -* Fix value set rendering creating wrong references -* Fix bug processing value set includes / excludes that are just value sets (no system value) -* Alter processing of unknown code systems per discussion at ,https://chat.fhir.org/#narrow/stream/179252-IG-creation/topic/Don't.20error.20when.20you.20can't.20find.20code.20system and implement unknown-codesystems-cause-errors -* Improve message for when elements are out of order in profile differentials - +* Validate of experimental property on bindings +* Add -no-experimental-content flag +* Allow JSON named extensions to be structure types other than logical +* Process relative URLs properly in base when generating snapshots ## Other code changes -* fix problem where profile rendering had spurious 'slices for' nodes everywhere -* Update SQL-On-FHIR implementation for latest cases, and clone test cases to general test care repository -* Fix problem generating value set spreadsheets -* fix concurrent modification error processing language translations -* Check for null fetcher processing ConceptMaps (#1728) +* Fix rendering path for value set references for kindling +* refactor error handling in ProfileUtilities +* Fix for NPE processing packages + From 9ba7bb447ff1549ddcafc3d10f6dbc290f9772de Mon Sep 17 00:00:00 2001 From: markiantorno Date: Tue, 17 Sep 2024 09:44:27 +0000 Subject: [PATCH 14/68] Updating i18n-coverage csv and png table ***NO_CI*** --- i18n-coverage-table.png | Bin 30997 -> 31259 bytes i18n-coverage.csv | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n-coverage-table.png b/i18n-coverage-table.png index 612370aec15032fa2a6d7e70464b4c1834f5737d..e3f25dc2dce82da4083f7e944f91d22eb0c5c443 100644 GIT binary patch literal 31259 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 X+Kh3o+KE~wN#n;(F+FQyx8Z*PM(9Cy literal 30997 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 XhCDj|VmbbbVrr|tk=}z%`%nKDnu$X! diff --git a/i18n-coverage.csv b/i18n-coverage.csv index 49cf39ece..bf44bb436 100644 --- a/i18n-coverage.csv +++ b/i18n-coverage.csv @@ -1,5 +1,5 @@ Locale,Coverage #,Coverage % -de,831,41% +de,831,40% es,714,35% ja,902,44% nl,1989,98% From e7f5c238d6c7dcbf8b2d3164cbdf93dc00c79bc6 Mon Sep 17 00:00:00 2001 From: Mark Iantorno Date: Tue, 17 Sep 2024 20:31:50 +0000 Subject: [PATCH 15/68] Updating test case dependency to v1.5.22 ***NO_CI*** --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 57abeddaf..cba39c632 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.22-SNAPSHOT + 1.5.22 2.17.0 5.9.2 1.8.2 From d2ad535b0b764fa52e979096debf4ea505101f18 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Wed, 18 Sep 2024 04:36:03 +0800 Subject: [PATCH 16/68] update tests dependency --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 57abeddaf..cba39c632 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.22-SNAPSHOT + 1.5.22 2.17.0 5.9.2 1.8.2 From 46affee48ff1dfb854df91fc0c6dc7c7d66dcdfd Mon Sep 17 00:00:00 2001 From: markiantorno Date: Tue, 17 Sep 2024 21:09:53 +0000 Subject: [PATCH 17/68] Release: v6.3.26 ## Validator Changes * Validate of experimental property on bindings * Add -no-experimental-content flag * Allow JSON named extensions to be structure types other than logical * Process relative URLs properly in base when generating snapshots ## Other code changes * Fix rendering path for value set references for kindling * refactor error handling in ProfileUtilities * Fix for NPE processing packages ***NO_CI*** --- org.hl7.fhir.convertors/pom.xml | 2 +- org.hl7.fhir.dstu2/pom.xml | 2 +- org.hl7.fhir.dstu2016may/pom.xml | 2 +- org.hl7.fhir.dstu3/pom.xml | 2 +- org.hl7.fhir.r4/pom.xml | 2 +- org.hl7.fhir.r4b/pom.xml | 2 +- org.hl7.fhir.r5/pom.xml | 2 +- org.hl7.fhir.report/pom.xml | 2 +- org.hl7.fhir.utilities/pom.xml | 2 +- org.hl7.fhir.validation.cli/pom.xml | 2 +- org.hl7.fhir.validation/pom.xml | 2 +- pom.xml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml index 497a67ca5..0a6586c96 100644 --- a/org.hl7.fhir.convertors/pom.xml +++ b/org.hl7.fhir.convertors/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml index 1ef5e9c18..fc29044d2 100644 --- a/org.hl7.fhir.dstu2/pom.xml +++ b/org.hl7.fhir.dstu2/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml index 10836492e..01bd0a40b 100644 --- a/org.hl7.fhir.dstu2016may/pom.xml +++ b/org.hl7.fhir.dstu2016may/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml index 9b9f1ede2..30d848f3b 100644 --- a/org.hl7.fhir.dstu3/pom.xml +++ b/org.hl7.fhir.dstu3/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml index bc3634f35..f24471b4b 100644 --- a/org.hl7.fhir.r4/pom.xml +++ b/org.hl7.fhir.r4/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml index df709cb6a..ed4dcdda5 100644 --- a/org.hl7.fhir.r4b/pom.xml +++ b/org.hl7.fhir.r4b/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml index 8bb7cfbb9..d9e3ffc8c 100644 --- a/org.hl7.fhir.r5/pom.xml +++ b/org.hl7.fhir.r5/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml index f0adc1c86..dca6fb2f2 100644 --- a/org.hl7.fhir.report/pom.xml +++ b/org.hl7.fhir.report/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml index e4d08a59f..4facadbd1 100644 --- a/org.hl7.fhir.utilities/pom.xml +++ b/org.hl7.fhir.utilities/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml index 54e5ebfa8..351f7d192 100644 --- a/org.hl7.fhir.validation.cli/pom.xml +++ b/org.hl7.fhir.validation.cli/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml index 10e3221ea..122708b8e 100644 --- a/org.hl7.fhir.validation/pom.xml +++ b/org.hl7.fhir.validation/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/pom.xml b/pom.xml index cba39c632..2ff0f4ba3 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ HAPI FHIR --> org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 pom From f3bd5b9be80ae3717b1121081ca54bd68c298e1f Mon Sep 17 00:00:00 2001 From: markiantorno Date: Tue, 17 Sep 2024 22:00:24 +0000 Subject: [PATCH 18/68] Updating version to: 6.3.27-SNAPSHOT and incrementing test cases dependency. --- RELEASE_NOTES.md | 10 ++-------- org.hl7.fhir.convertors/pom.xml | 2 +- org.hl7.fhir.dstu2/pom.xml | 2 +- org.hl7.fhir.dstu2016may/pom.xml | 2 +- org.hl7.fhir.dstu3/pom.xml | 2 +- org.hl7.fhir.r4/pom.xml | 2 +- org.hl7.fhir.r4b/pom.xml | 2 +- org.hl7.fhir.r5/pom.xml | 2 +- org.hl7.fhir.report/pom.xml | 2 +- org.hl7.fhir.utilities/pom.xml | 2 +- org.hl7.fhir.validation.cli/pom.xml | 2 +- org.hl7.fhir.validation/pom.xml | 2 +- pom.xml | 2 +- 13 files changed, 14 insertions(+), 20 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ce6a47dee..7b06c6ab5 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,13 +1,7 @@ ## Validator Changes -* Validate of experimental property on bindings -* Add -no-experimental-content flag -* Allow JSON named extensions to be structure types other than logical -* Process relative URLs properly in base when generating snapshots +* no changes ## Other code changes -* Fix rendering path for value set references for kindling -* refactor error handling in ProfileUtilities -* Fix for NPE processing packages - +* no changes \ No newline at end of file diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml index 0a6586c96..954879875 100644 --- a/org.hl7.fhir.convertors/pom.xml +++ b/org.hl7.fhir.convertors/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml index fc29044d2..0f35fa8bd 100644 --- a/org.hl7.fhir.dstu2/pom.xml +++ b/org.hl7.fhir.dstu2/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml index 01bd0a40b..73f375a3b 100644 --- a/org.hl7.fhir.dstu2016may/pom.xml +++ b/org.hl7.fhir.dstu2016may/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml index 30d848f3b..cf607fb20 100644 --- a/org.hl7.fhir.dstu3/pom.xml +++ b/org.hl7.fhir.dstu3/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml index f24471b4b..5dcc8666b 100644 --- a/org.hl7.fhir.r4/pom.xml +++ b/org.hl7.fhir.r4/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml index ed4dcdda5..aec9ce8e4 100644 --- a/org.hl7.fhir.r4b/pom.xml +++ b/org.hl7.fhir.r4b/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml index d9e3ffc8c..b196a2821 100644 --- a/org.hl7.fhir.r5/pom.xml +++ b/org.hl7.fhir.r5/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml index dca6fb2f2..dda6b248f 100644 --- a/org.hl7.fhir.report/pom.xml +++ b/org.hl7.fhir.report/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml index 4facadbd1..a2e86d2a1 100644 --- a/org.hl7.fhir.utilities/pom.xml +++ b/org.hl7.fhir.utilities/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml index 351f7d192..de8286041 100644 --- a/org.hl7.fhir.validation.cli/pom.xml +++ b/org.hl7.fhir.validation.cli/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml index 122708b8e..19fe4ae82 100644 --- a/org.hl7.fhir.validation/pom.xml +++ b/org.hl7.fhir.validation/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/pom.xml b/pom.xml index 2ff0f4ba3..aac61867c 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ HAPI FHIR --> org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT pom From 69525144f3814b0887ab793c4d167bc620de83ff Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Wed, 18 Sep 2024 14:07:09 +1000 Subject: [PATCH 19/68] #1723 fix R3 Quantity.copyValues() --- .../org/hl7/fhir/dstu3/model/Quantity.java | 7 +++- .../MedicationAdministrationCopyTest.java | 40 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/model/MedicationAdministrationCopyTest.java diff --git a/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/model/Quantity.java b/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/model/Quantity.java index fd3912594..1fe0a11e0 100644 --- a/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/model/Quantity.java +++ b/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/model/Quantity.java @@ -1,6 +1,7 @@ package org.hl7.fhir.dstu3.model; import java.math.BigDecimal; +import java.util.ArrayList; /* Copyright (c) 2011+, HL7, Inc. @@ -668,12 +669,16 @@ public class Quantity extends Type implements ICompositeType { public Quantity copy() { Quantity dst = new Quantity(); copyValues(dst); + return dst; + } + + public void copyValues(Quantity dst) { + super.copyValues(dst); dst.value = value == null ? null : value.copy(); dst.comparator = comparator == null ? null : comparator.copy(); dst.unit = unit == null ? null : unit.copy(); dst.system = system == null ? null : system.copy(); dst.code = code == null ? null : code.copy(); - return dst; } protected Quantity typedCopy() { diff --git a/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/model/MedicationAdministrationCopyTest.java b/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/model/MedicationAdministrationCopyTest.java new file mode 100644 index 000000000..a1adeb216 --- /dev/null +++ b/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/model/MedicationAdministrationCopyTest.java @@ -0,0 +1,40 @@ +package org.hl7.fhir.dstu3.model; + +import static org.junit.Assert.assertTrue; + +import java.io.IOException; + +import org.hl7.fhir.dstu3.formats.JsonParser; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +public class MedicationAdministrationCopyTest { + + @DisplayName("Test MedicationAdministration copy") + @Test + public void test() throws IOException { + MedicationAdministration beforeCopy = createMedAdminWithDosageDurationExtension(); + MedicationAdministration afterCopy = beforeCopy.copy(); + + System.out.println("---- BEFORE COPY (BEGIN)"); + System.out.println(new JsonParser().composeString(beforeCopy)); + System.out.println("---- BEFORE COPY (END)"); + System.out.println(); + System.out.println("---- AFTER COPY (BEGIN)"); + System.out.println(new JsonParser().composeString(afterCopy)); + System.out.println("---- AFTER COPY (END)"); + assertTrue(beforeCopy.equalsDeep(afterCopy)); + } + + private static MedicationAdministration createMedAdminWithDosageDurationExtension() { + MedicationAdministration resource = new MedicationAdministration(); + resource.setId("12345"); + var dosage = new MedicationAdministration.MedicationAdministrationDosageComponent(); + dosage.setDose((SimpleQuantity) new SimpleQuantity().setValue(40)) + .addExtension(new Extension() + .setUrl("http://duration") + .setValue(new Duration().setValue(5340000))); + resource.setDosage(dosage); + return resource; + } +} From 948f3411e24bf57ac8deaaa6d92009ab8bafe96b Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Wed, 18 Sep 2024 14:07:29 +1000 Subject: [PATCH 20/68] Fix case typo on Consent.provision in R4 --- .../resources30_40/Consent30_40.java | 12 +- .../resources40_50/Consent40_50.java | 8 +- .../org/hl7/fhir/r4/formats/JsonParser.java | 12 +- .../org/hl7/fhir/r4/formats/RdfParser.java | 2 +- .../org/hl7/fhir/r4/formats/XmlParser.java | 12 +- .../java/org/hl7/fhir/r4/model/Consent.java | 104 +++++++++--------- 6 files changed, 75 insertions(+), 75 deletions(-) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java index 1c783f74c..41dec2516 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java @@ -47,7 +47,7 @@ public class Consent30_40 { tgt.setPolicyRule(new CodeableConcept(c)); } if (src.hasSecurityLabel() || src.hasPeriod() || src.hasActor() || src.hasAction() || src.hasPurpose() || src.hasDataPeriod() || src.hasData() || src.hasExcept()) { - org.hl7.fhir.r4.model.Consent.provisionComponent pc = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + org.hl7.fhir.r4.model.Consent.ProvisionComponent pc = new org.hl7.fhir.r4.model.Consent.ProvisionComponent(); if (src.hasPeriod()) pc.setPeriod(Period30_40.convertPeriod(src.getPeriod())); for (org.hl7.fhir.dstu3.model.Consent.ConsentActorComponent t : src.getActor()) @@ -104,7 +104,7 @@ public class Consent30_40 { } } if (src.hasProvision()) { - org.hl7.fhir.r4.model.Consent.provisionComponent p = src.getProvision(); + org.hl7.fhir.r4.model.Consent.ProvisionComponent p = src.getProvision(); if (p.hasPeriod()) tgt.setPeriod(Period30_40.convertPeriod(p.getPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionActorComponent t : p.getActor()) @@ -117,7 +117,7 @@ public class Consent30_40 { tgt.setDataPeriod(Period30_40.convertPeriod(p.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : p.getData()) tgt.addData(convertConsentDataComponent(t)); - for (org.hl7.fhir.r4.model.Consent.provisionComponent t : p.getProvision()) + for (org.hl7.fhir.r4.model.Consent.ProvisionComponent t : p.getProvision()) tgt.addExcept(convertExceptComponent(t)); } return tgt; @@ -369,7 +369,7 @@ public class Consent30_40 { return tgt; } - static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { + static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(org.hl7.fhir.r4.model.Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.dstu3.model.Consent.ExceptComponent tgt = new org.hl7.fhir.dstu3.model.Consent.ExceptComponent(); @@ -393,10 +393,10 @@ public class Consent30_40 { return tgt; } - static public org.hl7.fhir.r4.model.Consent.provisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { + static public org.hl7.fhir.r4.model.Consent.ProvisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { if (src == null) return null; - org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + org.hl7.fhir.r4.model.Consent.ProvisionComponent tgt = new org.hl7.fhir.r4.model.Consent.ProvisionComponent(); ConversionContext30_40.INSTANCE.getVersionConvertor_30_40().copyBackboneElement(src,tgt); if (src.hasType()) tgt.setTypeElement(convertConsentExceptType(src.getTypeElement())); diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java index 0fe389de5..727efa673 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java @@ -220,7 +220,7 @@ public class Consent40_50 { return tgt; } - public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { + public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r4.model.Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.r5.model.Consent.ProvisionComponent tgt = new org.hl7.fhir.r5.model.Consent.ProvisionComponent(); @@ -242,15 +242,15 @@ public class Consent40_50 { tgt.setDataPeriod(Period40_50.convertPeriod(src.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : src.getData()) tgt.addData(convertprovisionDataComponent(t)); - for (org.hl7.fhir.r4.model.Consent.provisionComponent t : src.getProvision()) + for (org.hl7.fhir.r4.model.Consent.ProvisionComponent t : src.getProvision()) tgt.addProvision(convertprovisionComponent(t)); return tgt; } - public static org.hl7.fhir.r4.model.Consent.provisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { + public static org.hl7.fhir.r4.model.Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; - org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + org.hl7.fhir.r4.model.Consent.ProvisionComponent tgt = new org.hl7.fhir.r4.model.Consent.ProvisionComponent(); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt); // if (src.hasType()) // tgt.setTypeElement(convertConsentProvisionType(src.getTypeElement())); diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/JsonParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/JsonParser.java index 06ee27a94..49eff1638 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/JsonParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/JsonParser.java @@ -8400,15 +8400,15 @@ public class JsonParser extends JsonParserBase { parseElementProperties(getJObject(json, "_verificationDate"), res.getVerificationDateElement()); } - protected Consent.provisionComponent parseConsentprovisionComponent(JsonObject json, Consent owner) + protected Consent.ProvisionComponent parseConsentprovisionComponent(JsonObject json, Consent owner) throws IOException, FHIRFormatError { - Consent.provisionComponent res = new Consent.provisionComponent(); + Consent.ProvisionComponent res = new Consent.ProvisionComponent(); parseConsentprovisionComponentProperties(json, owner, res); return res; } protected void parseConsentprovisionComponentProperties(JsonObject json, Consent owner, - Consent.provisionComponent res) throws IOException, FHIRFormatError { + Consent.ProvisionComponent res) throws IOException, FHIRFormatError { parseBackboneElementProperties(json, res); if (json.has("type")) res.setTypeElement(parseEnumeration(json.get("type").getAsString(), Consent.ConsentProvisionType.NULL, @@ -41383,7 +41383,7 @@ public class JsonParser extends JsonParserBase { } } - protected void composeConsentprovisionComponent(String name, Consent.provisionComponent element) throws IOException { + protected void composeConsentprovisionComponent(String name, Consent.ProvisionComponent element) throws IOException { if (element != null) { open(name); composeConsentprovisionComponentInner(element); @@ -41391,7 +41391,7 @@ public class JsonParser extends JsonParserBase { } } - protected void composeConsentprovisionComponentInner(Consent.provisionComponent element) throws IOException { + protected void composeConsentprovisionComponentInner(Consent.ProvisionComponent element) throws IOException { composeBackbone(element); if (element.hasTypeElement()) { composeEnumerationCore("type", element.getTypeElement(), new Consent.ConsentProvisionTypeEnumFactory(), false); @@ -41454,7 +41454,7 @@ public class JsonParser extends JsonParserBase { ; if (element.hasProvision()) { openArray("provision"); - for (Consent.provisionComponent e : element.getProvision()) + for (Consent.ProvisionComponent e : element.getProvision()) composeConsentprovisionComponent(null, e); closeArray(); } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java index e09127adc..76ffee7e9 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java @@ -4917,7 +4917,7 @@ public class RdfParser extends RdfParserBase { } protected void composeConsentprovisionComponent(Complex parent, String parentType, String name, - Consent.provisionComponent element, int index) { + Consent.ProvisionComponent element, int index) { if (element == null) return; Complex t; diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java index 7ccf6fdd6..6c46487ea 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java @@ -6924,9 +6924,9 @@ public class XmlParser extends XmlParserBase { return true; } - protected Consent.provisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) + protected Consent.ProvisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) throws XmlPullParserException, IOException, FHIRFormatError { - Consent.provisionComponent res = new Consent.provisionComponent(); + Consent.ProvisionComponent res = new Consent.ProvisionComponent(); parseBackboneAttributes(xpp, res); next(xpp); int eventType = nextNoWhitespace(xpp); @@ -6941,7 +6941,7 @@ public class XmlParser extends XmlParserBase { } protected boolean parseConsentprovisionComponentContent(int eventType, XmlPullParser xpp, Consent owner, - Consent.provisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { + Consent.ProvisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("type")) { res.setTypeElement( parseEnumeration(xpp, Consent.ConsentProvisionType.NULL, new Consent.ConsentProvisionTypeEnumFactory())); @@ -34008,7 +34008,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponent(String name, Consent.provisionComponent element) throws IOException { + protected void composeConsentprovisionComponent(String name, Consent.ProvisionComponent element) throws IOException { if (element != null) { composeElementAttributes(element); xml.enter(FHIR_NS, name); @@ -34018,7 +34018,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponentElements(Consent.provisionComponent element) throws IOException { + protected void composeConsentprovisionComponentElements(Consent.ProvisionComponent element) throws IOException { composeBackboneElementElements(element); if (element.hasTypeElement()) composeEnumeration("type", element.getTypeElement(), new Consent.ConsentProvisionTypeEnumFactory()); @@ -34057,7 +34057,7 @@ public class XmlParser extends XmlParserBase { composeConsentprovisionDataComponent("data", e); } if (element.hasProvision()) { - for (Consent.provisionComponent e : element.getProvision()) + for (Consent.ProvisionComponent e : element.getProvision()) composeConsentprovisionComponent("provision", e); } } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java index 1560c3f27..eb2e25345 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java @@ -1221,7 +1221,7 @@ public class Consent extends DomainResource { } @Block() - public static class provisionComponent extends BackboneElement implements IBaseBackboneElement { + public static class ProvisionComponent extends BackboneElement implements IBaseBackboneElement { /** * Action to take - permit or deny - when the rule conditions are met. Not * permitted in root rule, required in all nested rules. @@ -1314,16 +1314,16 @@ public class Consent extends DomainResource { * Rules which provide exceptions to the base rule or subrules. */ @Child(name = "provision", type = { - provisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) + ProvisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) @Description(shortDefinition = "Nested Exception Rules", formalDefinition = "Rules which provide exceptions to the base rule or subrules.") - protected List provision; + protected List provision; private static final long serialVersionUID = -1280172451L; /** * Constructor */ - public provisionComponent() { + public ProvisionComponent() { super(); } @@ -1357,7 +1357,7 @@ public class Consent extends DomainResource { * extensions. The accessor "getType" gives direct access to the * value */ - public provisionComponent setTypeElement(Enumeration value) { + public ProvisionComponent setTypeElement(Enumeration value) { this.type = value; return this; } @@ -1374,7 +1374,7 @@ public class Consent extends DomainResource { * @param value Action to take - permit or deny - when the rule conditions are * met. Not permitted in root rule, required in all nested rules. */ - public provisionComponent setType(ConsentProvisionType value) { + public ProvisionComponent setType(ConsentProvisionType value) { if (value == null) this.type = null; else { @@ -1404,7 +1404,7 @@ public class Consent extends DomainResource { /** * @param value {@link #period} (The timeframe in this rule is valid.) */ - public provisionComponent setPeriod(Period value) { + public ProvisionComponent setPeriod(Period value) { this.period = value; return this; } @@ -1423,7 +1423,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setActor(List theActor) { + public ProvisionComponent setActor(List theActor) { this.actor = theActor; return this; } @@ -1445,7 +1445,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addActor(provisionActorComponent t) { // 3 + public ProvisionComponent addActor(provisionActorComponent t) { // 3 if (t == null) return this; if (this.actor == null) @@ -1477,7 +1477,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setAction(List theAction) { + public ProvisionComponent setAction(List theAction) { this.action = theAction; return this; } @@ -1499,7 +1499,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addAction(CodeableConcept t) { // 3 + public ProvisionComponent addAction(CodeableConcept t) { // 3 if (t == null) return this; if (this.action == null) @@ -1533,7 +1533,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setSecurityLabel(List theSecurityLabel) { + public ProvisionComponent setSecurityLabel(List theSecurityLabel) { this.securityLabel = theSecurityLabel; return this; } @@ -1555,7 +1555,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addSecurityLabel(Coding t) { // 3 + public ProvisionComponent addSecurityLabel(Coding t) { // 3 if (t == null) return this; if (this.securityLabel == null) @@ -1589,7 +1589,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setPurpose(List thePurpose) { + public ProvisionComponent setPurpose(List thePurpose) { this.purpose = thePurpose; return this; } @@ -1611,7 +1611,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addPurpose(Coding t) { // 3 + public ProvisionComponent addPurpose(Coding t) { // 3 if (t == null) return this; if (this.purpose == null) @@ -1646,7 +1646,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setClass_(List theClass_) { + public ProvisionComponent setClass_(List theClass_) { this.class_ = theClass_; return this; } @@ -1668,7 +1668,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addClass_(Coding t) { // 3 + public ProvisionComponent addClass_(Coding t) { // 3 if (t == null) return this; if (this.class_ == null) @@ -1701,7 +1701,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setCode(List theCode) { + public ProvisionComponent setCode(List theCode) { this.code = theCode; return this; } @@ -1723,7 +1723,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addCode(CodeableConcept t) { // 3 + public ProvisionComponent addCode(CodeableConcept t) { // 3 if (t == null) return this; if (this.code == null) @@ -1764,7 +1764,7 @@ public class Consent extends DomainResource { * @param value {@link #dataPeriod} (Clinical or Operational Relevant period of * time that bounds the data controlled by this rule.) */ - public provisionComponent setDataPeriod(Period value) { + public ProvisionComponent setDataPeriod(Period value) { this.dataPeriod = value; return this; } @@ -1782,7 +1782,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setData(List theData) { + public ProvisionComponent setData(List theData) { this.data = theData; return this; } @@ -1804,7 +1804,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addData(provisionDataComponent t) { // 3 + public ProvisionComponent addData(provisionDataComponent t) { // 3 if (t == null) return this; if (this.data == null) @@ -1828,16 +1828,16 @@ public class Consent extends DomainResource { * @return {@link #provision} (Rules which provide exceptions to the base rule * or subrules.) */ - public List getProvision() { + public List getProvision() { if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); return this.provision; } /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setProvision(List theProvision) { + public ProvisionComponent setProvision(List theProvision) { this.provision = theProvision; return this; } @@ -1845,25 +1845,25 @@ public class Consent extends DomainResource { public boolean hasProvision() { if (this.provision == null) return false; - for (provisionComponent item : this.provision) + for (ProvisionComponent item : this.provision) if (!item.isEmpty()) return true; return false; } - public provisionComponent addProvision() { // 3 - provisionComponent t = new provisionComponent(); + public ProvisionComponent addProvision() { // 3 + ProvisionComponent t = new ProvisionComponent(); if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return t; } - public provisionComponent addProvision(provisionComponent t) { // 3 + public ProvisionComponent addProvision(ProvisionComponent t) { // 3 if (t == null) return this; if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return this; } @@ -1872,7 +1872,7 @@ public class Consent extends DomainResource { * @return The first repetition of repeating field {@link #provision}, creating * it if it does not already exist */ - public provisionComponent getProvisionFirstRep() { + public ProvisionComponent getProvisionFirstRep() { if (getProvision().isEmpty()) { addProvision(); } @@ -2027,7 +2027,7 @@ public class Consent extends DomainResource { this.getData().add((provisionDataComponent) value); // provisionDataComponent return value; case -547120939: // provision - this.getProvision().add((provisionComponent) value); // provisionComponent + this.getProvision().add((ProvisionComponent) value); // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -2059,7 +2059,7 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().add((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().add((provisionComponent) value); + this.getProvision().add((ProvisionComponent) value); } else return super.setProperty(name, value); return value; @@ -2088,7 +2088,7 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().remove((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().remove((provisionComponent) value); + this.getProvision().remove((ProvisionComponent) value); } else super.removeChild(name, value); @@ -2186,13 +2186,13 @@ public class Consent extends DomainResource { return super.addChild(name); } - public provisionComponent copy() { - provisionComponent dst = new provisionComponent(); + public ProvisionComponent copy() { + ProvisionComponent dst = new ProvisionComponent(); copyValues(dst); return dst; } - public void copyValues(provisionComponent dst) { + public void copyValues(ProvisionComponent dst) { super.copyValues(dst); dst.type = type == null ? null : type.copy(); dst.period = period == null ? null : period.copy(); @@ -2240,8 +2240,8 @@ public class Consent extends DomainResource { } ; if (provision != null) { - dst.provision = new ArrayList(); - for (provisionComponent i : provision) + dst.provision = new ArrayList(); + for (ProvisionComponent i : provision) dst.provision.add(i.copy()); } ; @@ -2251,9 +2251,9 @@ public class Consent extends DomainResource { public boolean equalsDeep(Base other_) { if (!super.equalsDeep(other_)) return false; - if (!(other_ instanceof provisionComponent)) + if (!(other_ instanceof ProvisionComponent)) return false; - provisionComponent o = (provisionComponent) other_; + ProvisionComponent o = (ProvisionComponent) other_; return compareDeep(type, o.type, true) && compareDeep(period, o.period, true) && compareDeep(actor, o.actor, true) && compareDeep(action, o.action, true) && compareDeep(securityLabel, o.securityLabel, true) && compareDeep(purpose, o.purpose, true) && compareDeep(class_, o.class_, true) @@ -2265,9 +2265,9 @@ public class Consent extends DomainResource { public boolean equalsShallow(Base other_) { if (!super.equalsShallow(other_)) return false; - if (!(other_ instanceof provisionComponent)) + if (!(other_ instanceof ProvisionComponent)) return false; - provisionComponent o = (provisionComponent) other_; + ProvisionComponent o = (ProvisionComponent) other_; return compareValues(type, o.type, true); } @@ -3002,7 +3002,7 @@ public class Consent extends DomainResource { */ @Child(name = "provision", type = {}, order = 12, min = 0, max = 1, modifier = false, summary = true) @Description(shortDefinition = "Constraints to the base Consent.policyRule", formalDefinition = "An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.") - protected provisionComponent provision; + protected ProvisionComponent provision; private static final long serialVersionUID = 206528051L; @@ -3669,12 +3669,12 @@ public class Consent extends DomainResource { * @return {@link #provision} (An exception to the base policy of this consent. * An exception can be an addition or removal of access permissions.) */ - public provisionComponent getProvision() { + public ProvisionComponent getProvision() { if (this.provision == null) if (Configuration.errorOnAutoCreate()) throw new Error("Attempt to auto-create Consent.provision"); else if (Configuration.doAutoCreate()) - this.provision = new provisionComponent(); // cc + this.provision = new ProvisionComponent(); // cc return this.provision; } @@ -3687,7 +3687,7 @@ public class Consent extends DomainResource { * consent. An exception can be an addition or removal of access * permissions.) */ - public Consent setProvision(provisionComponent value) { + public Consent setProvision(ProvisionComponent value) { this.provision = value; return this; } @@ -3883,7 +3883,7 @@ public class Consent extends DomainResource { this.getVerification().add((ConsentVerificationComponent) value); // ConsentVerificationComponent return value; case -547120939: // provision - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -3919,7 +3919,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().add((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent } else return super.setProperty(name, value); return value; @@ -3952,7 +3952,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().remove((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent } else super.removeChild(name, value); @@ -4064,7 +4064,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { return addVerification(); } else if (name.equals("provision")) { - this.provision = new provisionComponent(); + this.provision = new ProvisionComponent(); return this.provision; } else return super.addChild(name); From eab82767534374b1b0994a35815b0c0c649e299f Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Wed, 18 Sep 2024 14:51:15 +1000 Subject: [PATCH 21/68] update test case dependency --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index aac61867c..883b784e5 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.22 + 1.5.23-SNAPSHOT 2.17.0 5.9.2 1.8.2 From 9a7a843a207b34e72f27a5ed27eb752bb2305b61 Mon Sep 17 00:00:00 2001 From: dotasek Date: Wed, 18 Sep 2024 10:15:38 -0400 Subject: [PATCH 22/68] Fix argument confusion in format (#1746) * Fix argument confusion in format * Bump test cases --- .../src/main/java/org/hl7/fhir/utilities/i18n/I18nBase.java | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nBase.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nBase.java index 09b7782f3..6470514c6 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nBase.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nBase.java @@ -125,7 +125,7 @@ public abstract class I18nBase { if (Objects.nonNull(theMessageArguments) && theMessageArguments.length > 0) { message = MessageFormat.format(messages.getString(theMessage).trim(), theMessageArguments); } else { - message = MessageFormat.format(messages.getString(theMessage).trim(), null); + message = MessageFormat.format(messages.getString(theMessage).trim(), (Object) null); } } return message; diff --git a/pom.xml b/pom.xml index aac61867c..883b784e5 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.22 + 1.5.23-SNAPSHOT 2.17.0 5.9.2 1.8.2 From 48066859d5b15e1b1d79e107b30dab37302ab04f Mon Sep 17 00:00:00 2001 From: dotasek Date: Wed, 18 Sep 2024 11:30:59 -0400 Subject: [PATCH 23/68] Check for lock owning process when trying to fix corrupt packages --- .../npm/FilesystemPackageCacheManager.java | 14 ++-- .../FilesystemPackageCacheManagerLocks.java | 16 +++++ .../FilesystemPackageManagerLockTests.java | 8 +-- .../npm/FilesystemPackageManagerTests.java | 51 +++++++++----- ...eUtility.java => LockfileTestUtility.java} | 67 ++++++++++++++++++- 5 files changed, 129 insertions(+), 27 deletions(-) rename org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/{LockfileUtility.java => LockfileTestUtility.java} (52%) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java index 71f11178e..f3fba6551 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java @@ -242,13 +242,15 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple protected void cleanUpCorruptPackages() throws IOException { for (File file : Objects.requireNonNull(cacheFolder.listFiles())) { if (file.getName().endsWith(".lock")) { - String packageDirectoryName = file.getName().substring(0, file.getName().length() - 5); - File packageDirectory = ManagedFileAccess.file(Utilities.path(cacheFolder, packageDirectoryName)); - if (packageDirectory.exists()) { - Utilities.clearDirectory(packageDirectory.getAbsolutePath()); - packageDirectory.delete(); + if (locks.getCacheLock().canLockFileBeHeldByThisProcess(file)) { + String packageDirectoryName = file.getName().substring(0, file.getName().length() - 5); + File packageDirectory = ManagedFileAccess.file(Utilities.path(cacheFolder, packageDirectoryName)); + if (packageDirectory.exists()) { + Utilities.clearDirectory(packageDirectory.getAbsolutePath()); + packageDirectory.delete(); + } + file.delete(); } - file.delete(); } } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java index 85b852da3..582596420 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java @@ -108,6 +108,19 @@ public class FilesystemPackageCacheManagerLocks { } return result; } + + public boolean canLockFileBeHeldByThisProcess(File lockFile) throws IOException { + return doWriteWithLock(() -> { + try (FileChannel channel = new RandomAccessFile(lockFile, "rw").getChannel()) { + FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, false); + if (fileLock != null) { + fileLock.release(); + channel.close(); + return true; + } + } + return false;}); + } } public class PackageLock { @@ -225,6 +238,9 @@ public class FilesystemPackageCacheManagerLocks { cacheLock.getLock().writeLock().lock(); lock.writeLock().lock(); + /*TODO Eventually, this logic should exist in a Lockfile class so that it isn't duplicated between the main code and + the test code. + */ try (FileChannel channel = new RandomAccessFile(lockFile, "rw").getChannel()) { FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, false); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java index a597fbacb..e20ecd747 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java @@ -183,8 +183,8 @@ public class FilesystemPackageManagerLockTests { FilesystemPackageCacheManagerLocks shorterTimeoutManager = filesystemPackageCacheLockManager; final FilesystemPackageCacheManagerLocks.PackageLock packageLock = shorterTimeoutManager.getPackageLock(DUMMY_PACKAGE); File lockFile = getPackageLockFile(); - Thread lockThread = LockfileUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); - LockfileUtility.waitForLockfileCreation(cachePath,lockFile.getName()); + Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); + LockfileTestUtility.waitForLockfileCreation(cachePath,lockFile.getName()); Exception exception = assertThrows(IOException.class, () -> { packageLock.doReadWithLock(() -> { @@ -206,8 +206,8 @@ public class FilesystemPackageManagerLockTests { final File lockFile = getPackageLockFile(); - Thread lockThread = LockfileUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); - LockfileUtility.waitForLockfileCreation(cachePath,lockFile.getName()); + Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); + LockfileTestUtility.waitForLockfileCreation(cachePath,lockFile.getName()); packageLock.doReadWithLock(() -> { assertThat(lockFile).doesNotExist(); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java index 5cfb1ae2a..d7565a348 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java @@ -14,7 +14,6 @@ import java.util.List; import java.util.Random; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; @@ -118,6 +117,23 @@ public class FilesystemPackageManagerTests { assertEquals( System.getenv("ProgramData") + "\\.fhir\\packages", folder.getAbsolutePath()); } + @Test + public void testCorruptPackageCleanup() throws IOException { + File cacheDirectory = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")); + + File dummyPackage = createDummyPackage(cacheDirectory, "example.fhir.uv.myig", "1.2.3"); + File dummyLockFile = createDummyLockFile(cacheDirectory, "example.fhir.uv.myig" , "1.2.3"); + + assertThat(dummyPackage).isDirectory(); + assertThat(dummyPackage).exists(); + assertThat(dummyLockFile).exists(); + + FilesystemPackageCacheManager filesystemPackageCacheManager = new FilesystemPackageCacheManager.Builder().withCacheFolder(cacheDirectory.getAbsolutePath()).build(); + + assertThat(dummyPackage).doesNotExist(); + assertThat(dummyLockFile).doesNotExist(); + } + @Test public void testTimeoutForLockedPackageRead() throws IOException, InterruptedException, TimeoutException { String pcmPath = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")).getAbsolutePath(); @@ -129,11 +145,11 @@ public class FilesystemPackageManagerTests { Assertions.assertTrue(pcm.listPackages().isEmpty()); - Thread lockThread = LockfileUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 10); + Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 10); File directory = ManagedFileAccess.file(pcmPath, "example.fhir.uv.myig#1.2.3" ); directory.mkdir(); - LockfileUtility.waitForLockfileCreation(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); + LockfileTestUtility.waitForLockfileCreation(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); IOException exception = assertThrows(IOException.class, () -> pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3")); @@ -142,10 +158,6 @@ public class FilesystemPackageManagerTests { lockThread.join(); } - - - - @Test public void testReadFromCacheOnlyWaitsForLockDelete() throws IOException, InterruptedException, TimeoutException { String pcmPath = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")).getAbsolutePath(); @@ -163,9 +175,8 @@ public class FilesystemPackageManagerTests { File directory = ManagedFileAccess.file(pcmPath, packageAndVersion); directory.mkdir(); - Thread lockThread = LockfileUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 5); - LockfileUtility.waitForLockfileCreation(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); - + Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 5); + LockfileTestUtility.waitForLockfileCreation(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); NpmPackage npmPackage = pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3"); @@ -187,16 +198,16 @@ public class FilesystemPackageManagerTests { return params.stream(); } - private void createDummyTemp(File cacheDirectory, String lowerCase) throws IOException { - createDummyPackage(cacheDirectory, lowerCase); + private File createDummyTemp(File cacheDirectory, String lowerCase) throws IOException { + return createDummyPackage(cacheDirectory, lowerCase); } - private void createDummyPackage(File cacheDirectory, String packageName, String packageVersion) throws IOException { + private File createDummyPackage(File cacheDirectory, String packageName, String packageVersion) throws IOException { String directoryName = packageName + "#" + packageVersion; - createDummyPackage(cacheDirectory, directoryName); + return createDummyPackage(cacheDirectory, directoryName); } - private static void createDummyPackage(File cacheDirectory, String directoryName) throws IOException { + private static File createDummyPackage(File cacheDirectory, String directoryName) throws IOException { File packageDirectory = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), directoryName); packageDirectory.mkdirs(); @@ -205,6 +216,16 @@ public class FilesystemPackageManagerTests { wr.write("Ain't nobody here but us chickens"); wr.flush(); wr.close(); + return packageDirectory; + } + + private File createDummyLockFile(File cacheDirectory, String packageName, String packageVersion) throws IOException { + final File dummyLockFile = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), packageName + "#" + packageVersion + ".lock"); + final FileWriter wr = new FileWriter(dummyLockFile); + wr.write("Ain't nobody here but us chickens"); + wr.flush(); + wr.close(); + return dummyLockFile; } private void assertThatDummyTempExists(File cacheDirectory, String dummyTempPackage) throws IOException { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java similarity index 52% rename from org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java rename to org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java index 5d4bedd10..9ea70fda0 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java @@ -10,7 +10,31 @@ import java.nio.file.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -public class LockfileUtility { +/** + * FilesystemPackageCacheManagerLocks relies on the existence of .lock files to prevent access to packages being written + * by processes outside the current JVM. Testing this functionality means creating a process outside the JUnit test JVM, + * which is achieved by running a separate Java process. + *

+ * Intended usage: + *

+ * The helper method {@link #lockWaitAndDeleteInNewProcess(String, String, int)} is the intended starting point for + * using this class. + *

+ * + * + * This class deliberately avoids using any dependencies outside java.*, which avoids having to construct a classpath + * for the separate process. + */ +public class LockfileTestUtility { + + /** + * Main method to allow running this class. + * + * It is not recommended to call this method directly. Instead, use the provided {@link LockfileTestUtility.l} method. + * + * + * @param args + */ public static void main(String[] args) { String lockFileName = args[1]; String path = args[0]; @@ -24,6 +48,18 @@ public class LockfileUtility { } + /** + * Wait for the lock file to be created in the given path. + *

+ * Normally, within the same JVM, you could use a CountdownLatch for the same purpose, but since this the lock file is + * being created in a separate process, we need to use a mechanism that doesn't rely on shared threads. + * + * @param path The path containing the lock file + * @param lockFileName The name of the lock file + * @throws InterruptedException If the thread is interrupted while waiting + * @throws IOException If there is an error accessing the file system + * @throws TimeoutException If the lock file is not created within 10 seconds + */ public static void waitForLockfileCreation(String path, String lockFileName) throws InterruptedException, IOException, TimeoutException { if (Files.exists(Paths.get(path, lockFileName))) { return; @@ -50,9 +86,21 @@ public class LockfileUtility { } } + /** + * Static helper method that starts a new process, creates a lock file in the path and waits for a specified number of + * seconds before deleting it. + *

+ * This method calls the {@link #main(String[])} method in a new process. + * + * @param path The path to create the lockfile in + * @param lockFileName The name of the lockfile + * @param seconds The number of seconds to wait before deleting the lockfile + * @return The thread wrapping the process execution. This can be used to wait for the process to complete, so that + * System.out and System.err can be processed before tests return results. + */ public static Thread lockWaitAndDeleteInNewProcess(String path, String lockFileName, int seconds) { Thread t = new Thread(() -> { - ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes:.", "org.hl7.fhir.utilities.npm.LockfileUtility", path, lockFileName, Integer.toString(seconds)); + ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes:.", LockfileTestUtility.class.getName(), path, lockFileName, Integer.toString(seconds)); try { Process process = processBuilder.start(); process.getErrorStream().transferTo(System.err); @@ -66,6 +114,21 @@ public class LockfileUtility { return t; } + /** + * The actual logic to create a .lock file. + *

+ * This should match the logic in FilesystemPackageCacheManagerLocks + *

+ * + * @param path The path to create the lockfile in + * @param lockFileName The name of the lockfile + * @param seconds The number of seconds to wait before deleting the lockfile + * @throws InterruptedException If the thread is interrupted while waiting + * @throws IOException If there is an error accessing the file system + */ + /* TODO Eventually, this logic should exist in a Lockfile class so that it isn't duplicated between the main code and + the test code. + */ private static void lockWaitAndDelete(String path, String lockFileName, int seconds) throws InterruptedException, IOException { File file = Paths.get(path,lockFileName).toFile(); From 048aa2abe5cb4dc94938175835eae5c6ba3390b6 Mon Sep 17 00:00:00 2001 From: dotasek Date: Wed, 18 Sep 2024 16:07:00 -0400 Subject: [PATCH 24/68] More testing --- .../FilesystemPackageManagerLockTests.java | 19 +++++++++++++++ .../npm/FilesystemPackageManagerTests.java | 23 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java index e20ecd747..34bde4ce8 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java @@ -1,6 +1,7 @@ package org.hl7.fhir.utilities.npm; import org.hl7.fhir.utilities.filesystem.ManagedFileAccess; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -16,6 +17,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertThrows; public class FilesystemPackageManagerLockTests { @@ -116,6 +118,23 @@ public class FilesystemPackageManagerLockTests { } } + @Test void testWhenLockIsntHeld_canLockFileBeHeldByThisProcessIsTrue() throws IOException { + File lockFile = getPackageLockFile(); + lockFile.createNewFile(); + Assertions.assertTrue(filesystemPackageCacheLockManager.getCacheLock().canLockFileBeHeldByThisProcess(lockFile)); + } + + @Test void testWhenLockIsHelp_canLockFileBeHeldByThisProcessIsFalse() throws IOException, InterruptedException, TimeoutException { + File lockFile = getPackageLockFile(); + Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(cachePath, DUMMY_PACKAGE + ".lock", 2); + + LockfileTestUtility.waitForLockfileCreation(cacheDirectory.getAbsolutePath(), DUMMY_PACKAGE + ".lock"); + + Assertions.assertFalse(filesystemPackageCacheLockManager.getCacheLock().canLockFileBeHeldByThisProcess(lockFile)); + + lockThread.join(); + } + @Test void testSinglePackageWriteMultiPackageRead() throws IOException { final FilesystemPackageCacheManagerLocks.PackageLock packageLock = filesystemPackageCacheLockManager.getPackageLock(DUMMY_PACKAGE); AtomicInteger writeCounter = new AtomicInteger(0); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java index d7565a348..dea38be40 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java @@ -134,6 +134,29 @@ public class FilesystemPackageManagerTests { assertThat(dummyLockFile).doesNotExist(); } + @Test + public void testLockedPackageIsntCleanedUp() throws IOException, InterruptedException, TimeoutException { + File cacheDirectory = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")); + + File dummyPackage = createDummyPackage(cacheDirectory, "example.fhir.uv.myig", "1.2.3"); + + Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(cacheDirectory.getAbsolutePath(), "example.fhir.uv.myig#1.2.3.lock", 2); + + LockfileTestUtility.waitForLockfileCreation(cacheDirectory.getAbsolutePath(), "example.fhir.uv.myig#1.2.3.lock"); + File dummyLockFile = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), "example.fhir.uv.myig#1.2.3.lock"); + + assertThat(dummyPackage).isDirectory(); + assertThat(dummyPackage).exists(); + assertThat(dummyLockFile).exists(); + + FilesystemPackageCacheManager filesystemPackageCacheManager = new FilesystemPackageCacheManager.Builder().withCacheFolder(cacheDirectory.getAbsolutePath()).build(); + + assertThat(dummyPackage).exists(); + assertThat(dummyLockFile).exists(); + + lockThread.join(); + } + @Test public void testTimeoutForLockedPackageRead() throws IOException, InterruptedException, TimeoutException { String pcmPath = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest")).getAbsolutePath(); From b30134abfc6e3e3efa9ff69a68f6a7a339dca5a9 Mon Sep 17 00:00:00 2001 From: dotasek Date: Wed, 18 Sep 2024 18:40:13 -0400 Subject: [PATCH 25/68] WIP Switch to apache commons instead of nio for directory monitor --- .../npm/FilesystemPackageCacheManager.java | 3 + .../FilesystemPackageManagerLockTests.java | 24 ++- .../npm/FilesystemPackageManagerTests.java | 6 +- .../npm/LockfileTestProcessUtility.java | 117 +++++++++++++ .../utilities/npm/LockfileTestUtility.java | 155 ++++-------------- 5 files changed, 175 insertions(+), 130 deletions(-) create mode 100644 org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java index f3fba6551..206d90782 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java @@ -244,12 +244,15 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple if (file.getName().endsWith(".lock")) { if (locks.getCacheLock().canLockFileBeHeldByThisProcess(file)) { String packageDirectoryName = file.getName().substring(0, file.getName().length() - 5); + log("Detected potential incomplete package installed in cache: " + packageDirectoryName + ". Attempting to delete"); + File packageDirectory = ManagedFileAccess.file(Utilities.path(cacheFolder, packageDirectoryName)); if (packageDirectory.exists()) { Utilities.clearDirectory(packageDirectory.getAbsolutePath()); packageDirectory.delete(); } file.delete(); + log("Deleted potential incomplete package: " + packageDirectoryName); } } } diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java index 34bde4ce8..49eb750e8 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java @@ -124,9 +124,9 @@ public class FilesystemPackageManagerLockTests { Assertions.assertTrue(filesystemPackageCacheLockManager.getCacheLock().canLockFileBeHeldByThisProcess(lockFile)); } - @Test void testWhenLockIsHelp_canLockFileBeHeldByThisProcessIsFalse() throws IOException, InterruptedException, TimeoutException { + @Test void testWhenLockIsHelp_canLockFileBeHeldByThisProcessIsFalse() throws InterruptedException, TimeoutException, IOException { File lockFile = getPackageLockFile(); - Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(cachePath, DUMMY_PACKAGE + ".lock", 2); + Thread lockThread = LockfileTestProcessUtility.lockWaitAndDeleteInNewProcess(cachePath, DUMMY_PACKAGE + ".lock", 2); LockfileTestUtility.waitForLockfileCreation(cacheDirectory.getAbsolutePath(), DUMMY_PACKAGE + ".lock"); @@ -198,11 +198,11 @@ public class FilesystemPackageManagerLockTests { } @Test - public void testReadWhenLockedByFileTimesOut() throws IOException, InterruptedException, TimeoutException { + public void testReadWhenLockedByFileTimesOut() throws InterruptedException, TimeoutException, IOException { FilesystemPackageCacheManagerLocks shorterTimeoutManager = filesystemPackageCacheLockManager; final FilesystemPackageCacheManagerLocks.PackageLock packageLock = shorterTimeoutManager.getPackageLock(DUMMY_PACKAGE); File lockFile = getPackageLockFile(); - Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); + Thread lockThread = LockfileTestProcessUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); LockfileTestUtility.waitForLockfileCreation(cachePath,lockFile.getName()); Exception exception = assertThrows(IOException.class, () -> { @@ -219,13 +219,25 @@ public class FilesystemPackageManagerLockTests { } @Test - public void testReadWhenLockFileIsDeleted() throws IOException, InterruptedException, TimeoutException { + public void apacheFileAlterationMonitorTest() { + + // Use Apache FileAlterationMonitor to monitor the cache directory for file deletions + // and create a lock file in a separate thread + + // Create a lock file in a separate thread + + + + } + + @Test + public void testReadWhenLockFileIsDeleted() throws InterruptedException, TimeoutException, IOException { final FilesystemPackageCacheManagerLocks.PackageLock packageLock = filesystemPackageCacheLockManager.getPackageLock(DUMMY_PACKAGE); final File lockFile = getPackageLockFile(); - Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); + Thread lockThread = LockfileTestProcessUtility.lockWaitAndDeleteInNewProcess(cachePath, lockFile.getName(), 5); LockfileTestUtility.waitForLockfileCreation(cachePath,lockFile.getName()); packageLock.doReadWithLock(() -> { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java index dea38be40..1221aeb66 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerTests.java @@ -140,7 +140,7 @@ public class FilesystemPackageManagerTests { File dummyPackage = createDummyPackage(cacheDirectory, "example.fhir.uv.myig", "1.2.3"); - Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(cacheDirectory.getAbsolutePath(), "example.fhir.uv.myig#1.2.3.lock", 2); + Thread lockThread = LockfileTestProcessUtility.lockWaitAndDeleteInNewProcess(cacheDirectory.getAbsolutePath(), "example.fhir.uv.myig#1.2.3.lock", 2); LockfileTestUtility.waitForLockfileCreation(cacheDirectory.getAbsolutePath(), "example.fhir.uv.myig#1.2.3.lock"); File dummyLockFile = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), "example.fhir.uv.myig#1.2.3.lock"); @@ -168,7 +168,7 @@ public class FilesystemPackageManagerTests { Assertions.assertTrue(pcm.listPackages().isEmpty()); - Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 10); + Thread lockThread = LockfileTestProcessUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 10); File directory = ManagedFileAccess.file(pcmPath, "example.fhir.uv.myig#1.2.3" ); directory.mkdir(); @@ -198,7 +198,7 @@ public class FilesystemPackageManagerTests { File directory = ManagedFileAccess.file(pcmPath, packageAndVersion); directory.mkdir(); - Thread lockThread = LockfileTestUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 5); + Thread lockThread = LockfileTestProcessUtility.lockWaitAndDeleteInNewProcess(pcmPath, "example.fhir.uv.myig#1.2.3.lock", 5); LockfileTestUtility.waitForLockfileCreation(pcmPath, "example.fhir.uv.myig#1.2.3.lock"); NpmPackage npmPackage = pcm.loadPackageFromCacheOnly("example.fhir.uv.myig", "1.2.3"); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java new file mode 100644 index 000000000..0e8f3f73d --- /dev/null +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java @@ -0,0 +1,117 @@ +package org.hl7.fhir.utilities.npm; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; + +/** + * FilesystemPackageCacheManagerLocks relies on the existence of .lock files to prevent access to packages being written + * by processes outside the current JVM. Testing this functionality means creating a process outside the JUnit test JVM, + * which is achieved by running a separate Java process. + *

+ * Intended usage: + *

+ * The helper method {@link #lockWaitAndDeleteInNewProcess(String, String, int)} is the intended starting point for + * using this class. + *

+ * + * + * This class deliberately avoids using any dependencies outside java.*, which avoids having to construct a classpath + * for the separate process. + */ +public class LockfileTestProcessUtility { + /** + * Main method to allow running this class. + *

+ * This method calls the {@link #main(String[])} method in a new process. + * + * @param path The path to create the lockfile in + * @param lockFileName The name of the lockfile + * @param seconds The number of seconds to wait before deleting the lockfile + * @return The thread wrapping the process execution. This can be used to wait for the process to complete, so that + * System.out and System.err can be processed before tests return results. + */ + public static Thread lockWaitAndDeleteInNewProcess(String path, String lockFileName, int seconds) { + Thread t = new Thread(() -> { + ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes:.", LockfileTestProcessUtility.class.getName(), path, lockFileName, Integer.toString(seconds)); + try { + Process process = processBuilder.start(); + process.getErrorStream().transferTo(System.err); + process.getInputStream().transferTo(System.out); + process.waitFor(); + } catch (IOException | InterruptedException e) { + throw new RuntimeException(e); + } + }); + t.start(); + return t; + } + + /** + * The actual logic to create a .lock file. + *

+ * This should match the logic in FilesystemPackageCacheManagerLocks + *

+ * + * @param path The path to create the lockfile in + * @param lockFileName The name of the lockfile + * @param seconds The number of seconds to wait before deleting the lockfile + * @throws InterruptedException If the thread is interrupted while waiting + * @throws IOException If there is an error accessing the file system + */ + /* TODO Eventually, this logic should exist in a Lockfile class so that it isn't duplicated between the main code and + the test code. + */ + private static void lockWaitAndDelete(String path, String lockFileName, int seconds) throws InterruptedException, IOException { + + File file = Paths.get(path,lockFileName).toFile(); + + try (FileChannel channel = new RandomAccessFile(file.getAbsolutePath(), "rw").getChannel()) { + FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, false); + if (fileLock != null) { + final ByteBuffer buff = ByteBuffer.wrap("Hello world".getBytes(StandardCharsets.UTF_8)); + channel.write(buff); + System.out.println("File "+lockFileName+" is locked. Waiting for " + seconds + " seconds to release. "); + Thread.sleep(seconds * 1000L); + file.delete(); + fileLock.release(); + System.out.println(System.currentTimeMillis()); + System.out.println("File "+lockFileName+" is released."); + + channel.close(); + }}finally { + if (file.exists()) { + file.delete(); + } + } + } +} diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java index 9ea70fda0..44949ac6e 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java @@ -1,52 +1,21 @@ package org.hl7.fhir.utilities.npm; +import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; +import org.apache.commons.io.monitor.FileAlterationMonitor; +import org.apache.commons.io.monitor.FileAlterationObserver; + import java.io.*; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel; -import java.nio.channels.FileLock; -import java.nio.charset.StandardCharsets; + import java.nio.file.*; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -/** - * FilesystemPackageCacheManagerLocks relies on the existence of .lock files to prevent access to packages being written - * by processes outside the current JVM. Testing this functionality means creating a process outside the JUnit test JVM, - * which is achieved by running a separate Java process. - *

- * Intended usage: - *

- * The helper method {@link #lockWaitAndDeleteInNewProcess(String, String, int)} is the intended starting point for - * using this class. - *

- * - * - * This class deliberately avoids using any dependencies outside java.*, which avoids having to construct a classpath - * for the separate process. - */ + public class LockfileTestUtility { - /** - * Main method to allow running this class. - * - * It is not recommended to call this method directly. Instead, use the provided {@link LockfileTestUtility.l} method. - * - * - * @param args - */ - public static void main(String[] args) { - String lockFileName = args[1]; - String path = args[0]; - int seconds = Integer.parseInt(args[2]); - try { - lockWaitAndDelete(path, lockFileName, seconds); - } catch (InterruptedException | IOException e) { - throw new RuntimeException(e); - } - - } /** * Wait for the lock file to be created in the given path. @@ -57,98 +26,42 @@ public class LockfileTestUtility { * @param path The path containing the lock file * @param lockFileName The name of the lock file * @throws InterruptedException If the thread is interrupted while waiting - * @throws IOException If there is an error accessing the file system * @throws TimeoutException If the lock file is not created within 10 seconds */ - public static void waitForLockfileCreation(String path, String lockFileName) throws InterruptedException, IOException, TimeoutException { + public static void waitForLockfileCreation(String path, String lockFileName) throws InterruptedException, TimeoutException { if (Files.exists(Paths.get(path, lockFileName))) { return; } - try (WatchService watchService = FileSystems.getDefault().newWatchService()) { - Path dir = Paths.get(path); - dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE); + CountDownLatch latch = new CountDownLatch(1); + FileAlterationMonitor monitor = new FileAlterationMonitor(100); + FileAlterationObserver observer = new FileAlterationObserver(path); - WatchKey key = watchService.poll(10, TimeUnit.SECONDS); - if (key == null) { - throw new TimeoutException("Timeout waiting for lock file creation: " + lockFileName); - } - for (WatchEvent event : key.pollEvents()) { - WatchEvent.Kind kind = event.kind(); - if (kind == StandardWatchEventKinds.ENTRY_CREATE) { - Path createdFile = (Path) event.context(); - if (createdFile.toString().equals(lockFileName)) { - System.out.println("Lock file created: " + lockFileName); - return; - } - } - } - throw new TimeoutException("Timeout waiting for lock file creation: " + lockFileName); - } - } - - /** - * Static helper method that starts a new process, creates a lock file in the path and waits for a specified number of - * seconds before deleting it. - *

- * This method calls the {@link #main(String[])} method in a new process. - * - * @param path The path to create the lockfile in - * @param lockFileName The name of the lockfile - * @param seconds The number of seconds to wait before deleting the lockfile - * @return The thread wrapping the process execution. This can be used to wait for the process to complete, so that - * System.out and System.err can be processed before tests return results. - */ - public static Thread lockWaitAndDeleteInNewProcess(String path, String lockFileName, int seconds) { - Thread t = new Thread(() -> { - ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes:.", LockfileTestUtility.class.getName(), path, lockFileName, Integer.toString(seconds)); - try { - Process process = processBuilder.start(); - process.getErrorStream().transferTo(System.err); - process.getInputStream().transferTo(System.out); - process.waitFor(); - } catch (IOException | InterruptedException e) { - throw new RuntimeException(e); + observer.addListener(new FileAlterationListenerAdaptor(){ + @Override + public void onFileCreate(File file) { + System.out.println("File created: " + file.getName()); + latch.countDown(); } }); - t.start(); - return t; - } + monitor.addObserver(observer); - /** - * The actual logic to create a .lock file. - *

- * This should match the logic in FilesystemPackageCacheManagerLocks - *

");
diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/client/network/FhirLoggingInterceptor.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/client/network/FhirLoggingInterceptor.java
index 4e2e52bb9..38d195380 100644
--- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/client/network/FhirLoggingInterceptor.java
+++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/client/network/FhirLoggingInterceptor.java
@@ -64,7 +64,7 @@ public class FhirLoggingInterceptor implements Interceptor {
     headerMap.keySet().forEach(key -> headerMap.get(key).forEach(value -> headerList.add(key + ":" + value)));
 
     if (logger != null) {
-      logger.logResponse(Integer.toString(response.code()), headerList, bodyBytes);
+      logger.logResponse(Integer.toString(response.code()), headerList, bodyBytes, 0);
     }
 
     // Reading byte[] clears body. Need to recreate.
diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/HTMLClientLogger.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/HTMLClientLogger.java
index b2e7b46bd..f19553f5e 100644
--- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/HTMLClientLogger.java
+++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/HTMLClientLogger.java
@@ -85,7 +85,7 @@ public class HTMLClientLogger extends BaseLogger implements ToolingClientLogger
   }
 
   @Override
-  public void logResponse(String outcome, List headers, byte[] body) {
+  public void logResponse(String outcome, List headers, byte[] body, long start) {
     if (DEBUG) {
       System.out.println(" txlog resp: " + outcome + " " + present(body));
     }
diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/TextClientLogger.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/TextClientLogger.java
index 3bae5583d..fa29392ae 100644
--- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/TextClientLogger.java
+++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/TextClientLogger.java
@@ -72,7 +72,7 @@ public class TextClientLogger extends BaseLogger implements ToolingClientLogger
   }
 
   @Override
-  public void logResponse(String outcome, List headers, byte[] body) {
+  public void logResponse(String outcome, List headers, byte[] body, long start) {
     if (file == null)
       return;
     file.println("\r\n\r\nResponse: \r\n");
diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/client/network/FhirLoggingInterceptor.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/client/network/FhirLoggingInterceptor.java
index 9d2f06d7b..7a9a6a282 100644
--- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/client/network/FhirLoggingInterceptor.java
+++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/client/network/FhirLoggingInterceptor.java
@@ -59,7 +59,7 @@ public class FhirLoggingInterceptor implements Interceptor {
     headerMap.keySet().forEach(key -> headerMap.get(key).forEach(value -> headerList.add(key + ":" + value)));
 
     if (logger != null) {
-      logger.logResponse(Integer.toString(response.code()), headerList, bodyBytes);
+      logger.logResponse(Integer.toString(response.code()), headerList, bodyBytes, 0);
     }
 
     // Reading byte[] clears body. Need to recreate.
diff --git a/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/utils/client/network/ClientTest.java b/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/utils/client/network/ClientTest.java
index 298c7e080..49eea9d99 100644
--- a/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/utils/client/network/ClientTest.java
+++ b/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/utils/client/network/ClientTest.java
@@ -134,6 +134,6 @@ class ClientTest {
     server.takeRequest();
     Mockito.verify(mockLogger, Mockito.times(1)).logRequest(Mockito.anyString(), Mockito.anyString(), Mockito.anyList(),
         Mockito.any());
-    Mockito.verify(mockLogger, Mockito.times(1)).logResponse(Mockito.anyString(), Mockito.anyList(), Mockito.any());
+    Mockito.verify(mockLogger, Mockito.times(1)).logResponse(Mockito.anyString(), Mockito.anyList(), Mockito.any(), 0);
   }
 }
\ No newline at end of file
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/HTMLClientLogger.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/HTMLClientLogger.java
index e892ab0dc..19bd73580 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/HTMLClientLogger.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/HTMLClientLogger.java
@@ -87,7 +87,7 @@ public class HTMLClientLogger extends BaseLogger implements ToolingClientLogger
   }
 
   @Override
-  public void logResponse(String outcome, List headers, byte[] body) {
+  public void logResponse(String outcome, List headers, byte[] body, long start) {
     if (DEBUG) {
       System.out.println(" txlog resp: " +outcome+" "+present(body));
     }
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/TextClientLogger.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/TextClientLogger.java
index d6fc62c0f..836f528b9 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/TextClientLogger.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/TextClientLogger.java
@@ -76,10 +76,10 @@ public class TextClientLogger extends BaseLogger implements ToolingClientLogger
   }
 
   @Override
-  public void logResponse(String outcome, List headers, byte[] body) {
+  public void logResponse(String outcome, List headers, byte[] body, long length) {
     if (file == null)
       return;
-    file.println("\r\n\r\nResponse: \r\n");
+    file.println("\r\n\r\nResponse ("+Utilities.describeDuration(length)+"): \r\n");
     file.println(outcome);
     for (String s : headers)  
       file.println(s);
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/client/network/FhirLoggingInterceptor.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/client/network/FhirLoggingInterceptor.java
index ac7bf4a94..1314e6c8a 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/client/network/FhirLoggingInterceptor.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/client/network/FhirLoggingInterceptor.java
@@ -59,7 +59,8 @@ public class FhirLoggingInterceptor implements Interceptor {
     headerMap.keySet().forEach(key -> headerMap.get(key).forEach(value -> headerList.add(key + ":" + value)));
 
     if (logger != null) {
-      logger.logResponse(Integer.toString(response.code()), headerList, bodyBytes);
+      long responseTimeInMillis = response.receivedResponseAtMillis() - response.sentRequestAtMillis();
+      logger.logResponse(Integer.toString(response.code()), headerList, bodyBytes, responseTimeInMillis);
     }
 
     // Reading byte[] clears body. Need to recreate.
diff --git a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/utils/client/network/ClientTest.java b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/utils/client/network/ClientTest.java
index fe1e94411..de6aa7f8f 100644
--- a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/utils/client/network/ClientTest.java
+++ b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/utils/client/network/ClientTest.java
@@ -172,6 +172,6 @@ class ClientTest {
     Mockito.verify(mockLogger, Mockito.times(1))
       .logRequest(Mockito.anyString(), Mockito.anyString(), Mockito.anyList(), Mockito.any());
     Mockito.verify(mockLogger, Mockito.times(1))
-      .logResponse(Mockito.anyString(), Mockito.anyList(), Mockito.any());
+      .logResponse(Mockito.anyString(), Mockito.anyList(), Mockito.any(), Mockito.anyLong());
   }
 }
\ No newline at end of file
diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/ToolingClientLogger.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/ToolingClientLogger.java
index daa6e739f..fb39acb98 100644
--- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/ToolingClientLogger.java
+++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/ToolingClientLogger.java
@@ -36,7 +36,7 @@ import java.util.List;
 public interface ToolingClientLogger {
 
   void logRequest(String method, String url, List headers, byte[] body);
-  void logResponse(String outcome, List headers, byte[] body);
+  void logResponse(String outcome, List headers, byte[] body, long length);
   String getLastId();
   void clearLastId();
 
diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/tests/CacheVerificationLogger.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/tests/CacheVerificationLogger.java
index 1be1eab5b..2ff232a1e 100644
--- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/tests/CacheVerificationLogger.java
+++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/tests/CacheVerificationLogger.java
@@ -33,7 +33,7 @@ public class CacheVerificationLogger implements ToolingClientLogger {
   }
 
   @Override
-  public void logResponse(String outcome, List headers, byte[] body) {
+  public void logResponse(String outcome, List headers, byte[] body, long start) {
 
   }
 

From 7479862a303475bdfa88c527ac8966f36558d6cd Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Tue, 24 Sep 2024 20:25:32 -0400
Subject: [PATCH 47/68] Allow for code to turn off use of cache-id on tx
 interface (for debugging)

---
 .../client/TerminologyClientContext.java            | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientContext.java
index a15139944..4d8c5d7ee 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientContext.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientContext.java
@@ -51,6 +51,8 @@ public class TerminologyClientContext {
     
   }
 
+  private static boolean canUseCacheId;
+
   private ITerminologyClient client;
   private boolean initialised = false;
   private CapabilityStatement capabilitiesStatementQuick;
@@ -180,7 +182,7 @@ public class TerminologyClientContext {
           txCache.cacheTerminologyCapabilities(getAddress(), txcaps);
         }
       }
-      if (txcaps != null) {
+      if (txcaps != null && TerminologyClientContext.canUseCacheId) {
         for (TerminologyCapabilitiesExpansionParameterComponent t : txcaps.getExpansion().getParameter()) {
           if ("cache-id".equals(t.getName())) {
             setTxCaching(true);
@@ -206,6 +208,13 @@ public class TerminologyClientContext {
   public String toString() {
     return client.getAddress();
   }
-  
+
+  public static boolean isCanUseCacheId() {
+    return canUseCacheId;
+  }
+
+  public static void setCanUseCacheId(boolean canUseCacheId) {
+    TerminologyClientContext.canUseCacheId = canUseCacheId;
+  }
   
 }

From b05d4b35ea75c98df6873149eef7c770fc419461 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Tue, 24 Sep 2024 20:33:55 -0400
Subject: [PATCH 48/68] Handle tx server issue

---
 .../org/hl7/fhir/r5/context/BaseWorkerContext.java    | 11 ++++++++---
 .../org/hl7/fhir/utilities/http/ManagedWebAccess.java |  6 +++---
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
index 001aad87f..6676b62ae 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
@@ -1276,9 +1276,9 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
   }
   
   public ValidationResult validateCode(final ValidationOptions optionsArg, String path, final Coding code, final ValueSet vs, final ValidationContextCarrier ctxt) {
-
+  
     ValidationOptions options = optionsArg != null ? optionsArg : ValidationOptions.defaults();
-
+    
     if (code.hasSystem()) {
       codeSystemsUsed.add(code.getSystem());
     }
@@ -1643,7 +1643,11 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
       Parameters pIn = constructParameters(options, code);
       res = validateOnServer(tc, vs, pIn, options);
     } catch (Exception e) {
-      res = new ValidationResult(IssueSeverity.ERROR, e.getMessage() == null ? e.getClass().getName() : e.getMessage(), null).setTxLink(txLog == null ? null : txLog.getLastId());
+      issues.clear();
+      OperationOutcomeIssueComponent iss = new OperationOutcomeIssueComponent(org.hl7.fhir.r5.model.OperationOutcome.IssueSeverity.ERROR, org.hl7.fhir.r5.model.OperationOutcome.IssueType.EXCEPTION);
+      iss.getDetails().setText(e.getMessage());
+      issues.add(iss);
+      res = new ValidationResult(IssueSeverity.ERROR, e.getMessage() == null ? e.getClass().getName() : e.getMessage(), issues).setTxLink(txLog == null ? null : txLog.getLastId()).setErrorClass(TerminologyServiceErrorClass.SERVER_ERROR);
     }
     if (cachingAllowed) {
       txCache.cacheValidation(cacheToken, res, TerminologyCache.PERMANENT);
@@ -1779,6 +1783,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
     if (options.isDisplayWarningMode()) {
       pin.addParameter("mode","lenient-display-validation");
     }
+    pin.addParameter("diagnostics", true);
   }
 
   private boolean addDependentResources(TerminologyClientContext tc, Parameters pin, ValueSet vs) {
diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/http/ManagedWebAccess.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/http/ManagedWebAccess.java
index 6c90c3a44..6dfaf7a35 100644
--- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/http/ManagedWebAccess.java
+++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/http/ManagedWebAccess.java
@@ -64,9 +64,9 @@ public class ManagedWebAccess {
   }
 
   public enum WebAccessPolicy {
-    DIRECT, // open access to the local file system, though access can be restricted only to files under the paths in AllowedPaths
-    MANAGED, // no access except by the FileSystemProxyProvider
-    PROHIBITED, // no access at all to File() services
+    DIRECT, // open access to the web, though access can be restricted only to domains in AllowedDomains
+    MANAGED, // no access except by the IWebAccessor
+    PROHIBITED, // no access at all to the web
   }
 
   private static WebAccessPolicy accessPolicy = WebAccessPolicy.DIRECT; // for legacy reasons

From cdaf85bf0bf501cbb0df87136a7904fc9682f6f4 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Tue, 24 Sep 2024 20:34:23 -0400
Subject: [PATCH 49/68] support n/a for tx cache folder

---
 .../utilities/TerminologyCache.java           | 46 ++++++++++++-------
 1 file changed, 30 insertions(+), 16 deletions(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyCache.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyCache.java
index b65c63a2e..3a60a33bc 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyCache.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyCache.java
@@ -302,22 +302,26 @@ public class TerminologyCache {
     this.lock = lock;
     if (folder == null) {
       folder = Utilities.path("[tmp]", "default-tx-cache");
+    } else if ("n/a".equals(folder)) {
+      // this is a weird way to do things but it maintains the legacy interface
+      folder = null;
     }
     this.folder = folder;
     requestCount = 0;
     hitCount = 0;
     networkCount = 0;
 
-    
-    File f = ManagedFileAccess.file(folder);
-    if (!f.exists()) {
-      Utilities.createDirectory(folder);
+    if (folder != null) {
+      File f = ManagedFileAccess.file(folder);
+      if (!f.exists()) {
+        Utilities.createDirectory(folder);
+      }
+      if (!f.exists()) {
+        throw new IOException("Unable to create terminology cache at "+folder);
+      }
+      checkVersion();      
+      load();
     }
-    if (!f.exists()) {
-      throw new IOException("Unable to create terminology cache at "+folder);
-    }
-    checkVersion();      
-    load();
   }
 
   private void checkVersion() throws IOException {
@@ -361,7 +365,9 @@ public class TerminologyCache {
   }
   
   private void clear() throws IOException {
-    Utilities.clearDirectory(folder);
+    if (folder != null) {
+      Utilities.clearDirectory(folder);
+    }
     caches.clear();
     vsCache.clear();
     csCache.clear();
@@ -1039,7 +1045,7 @@ public class TerminologyCache {
 
   public SourcedValueSet getValueSet(String canonical) {
     SourcedValueSetEntry sp = vsCache.get(canonical);
-    if (sp == null) {
+    if (sp == null || folder == null) {
       return null;
     } else {
       try {
@@ -1052,7 +1058,7 @@ public class TerminologyCache {
 
   public SourcedCodeSystem getCodeSystem(String canonical) {
     SourcedCodeSystemEntry sp = csCache.get(canonical);
-    if (sp == null) {
+    if (sp == null || folder == null) {
       return null;
     } else {
       try {
@@ -1073,7 +1079,9 @@ public class TerminologyCache {
       } else {
         String uuid = Utilities.makeUuidLC();
         String fn = "vs-"+uuid+".json";
-        new JsonParser().compose(ManagedFileAccess.outStream(Utilities.path(folder, fn)), svs.getVs());
+        if (folder != null) {
+          new JsonParser().compose(ManagedFileAccess.outStream(Utilities.path(folder, fn)), svs.getVs());
+        }
         vsCache.put(canonical, new SourcedValueSetEntry(svs.getServer(), fn));
       }    
       org.hl7.fhir.utilities.json.model.JsonObject j = new org.hl7.fhir.utilities.json.model.JsonObject();
@@ -1090,7 +1098,9 @@ public class TerminologyCache {
           j.add(k, e);
         }
       }
-      org.hl7.fhir.utilities.json.parser.JsonParser.compose(j, ManagedFileAccess.file(Utilities.path(folder, "vs-externals.json")), true);
+      if (folder != null) {
+        org.hl7.fhir.utilities.json.parser.JsonParser.compose(j, ManagedFileAccess.file(Utilities.path(folder, "vs-externals.json")), true);
+      }
     } catch (Exception e) {
       e.printStackTrace();
     }
@@ -1106,7 +1116,9 @@ public class TerminologyCache {
       } else {
         String uuid = Utilities.makeUuidLC();
         String fn = "cs-"+uuid+".json";
-        new JsonParser().compose(ManagedFileAccess.outStream(Utilities.path(folder, fn)), scs.getCs());
+        if (folder != null) {
+          new JsonParser().compose(ManagedFileAccess.outStream(Utilities.path(folder, fn)), scs.getCs());
+        }
         csCache.put(canonical, new SourcedCodeSystemEntry(scs.getServer(), fn));
       }    
       org.hl7.fhir.utilities.json.model.JsonObject j = new org.hl7.fhir.utilities.json.model.JsonObject();
@@ -1123,7 +1135,9 @@ public class TerminologyCache {
           j.add(k, e);
         }
       }
-      org.hl7.fhir.utilities.json.parser.JsonParser.compose(j, ManagedFileAccess.file(Utilities.path(folder, "cs-externals.json")), true);
+      if (folder != null) {
+        org.hl7.fhir.utilities.json.parser.JsonParser.compose(j, ManagedFileAccess.file(Utilities.path(folder, "cs-externals.json")), true);
+      }
     } catch (Exception e) {
       e.printStackTrace();
     }

From 176b0caf63a3e2702f1b383c44e679c192d23dd5 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Tue, 24 Sep 2024 20:42:19 -0400
Subject: [PATCH 50/68] Do not use server piecemeal when validating complex
 value sets

---
 .../TerminologyOperationContext.java          |  2 +-
 .../validation/ValueSetValidator.java         | 62 +++++++++++++++++--
 2 files changed, 58 insertions(+), 6 deletions(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java
index 9b36437e5..d4b6234eb 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java
@@ -74,7 +74,7 @@ public class TerminologyOperationContext {
   
   public void deadCheck() {
     if (deadTime != 0 &&  System.currentTimeMillis() > deadTime) {
-      throw new TerminologyServiceProtectionException(worker.formatMessage(I18nConstants.VALUESET_TOO_COSTLY_TIME, contexts.get(0), EXPANSION_DEAD_TIME_SECS, name), TerminologyServiceErrorClass.TOO_COSTLY, IssueType.TOOCOSTLY);
+      throw new TerminologyServiceProtectionException(worker.formatMessage(I18nConstants.VALUESET_TOO_COSTLY_TIME, contexts.get(0), EXPANSION_DEAD_TIME_SECS, name+" (local)"), TerminologyServiceErrorClass.TOO_COSTLY, IssueType.TOOCOSTLY);
     }
   }
   
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
index dd8b9733a..c811be7be 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
@@ -224,6 +224,10 @@ public class ValueSetValidator extends ValueSetProcessBase {
 
     // first, we validate the codings themselves
     ValidationProcessInfo info = new ValidationProcessInfo();
+    
+    if (throwToServer) {
+      checkValueSetLoad(info);
+    }
 
     CodeableConcept vcc = new CodeableConcept();
     List resList = new ArrayList<>();
@@ -395,6 +399,45 @@ public class ValueSetValidator extends ValueSetProcessBase {
     }
   }
 
+  private void checkValueSetLoad(ValidationProcessInfo info) {
+    int serverCount = getServerLoad(info);
+    // There's a trade off here: if we're going to hit the server inside the components, then
+    // the amount of value set collateral we send is limited, but we pay the price of hitting 
+    // the server multiple times. If, on the other hand, we give up on that, and hit the server 
+    // directly, we have to send value set collateral (though we cache at the higher level)
+    //
+    // the cutoff value is chosen experimentally
+    if (serverCount > 2) {
+      throw new VSCheckerException("This value set is better processed on the server for performance reasons", null, true);
+    }
+  }
+
+  private int getServerLoad(ValidationProcessInfo info) {
+    int serverCount = 0;
+    if (valueset != null) {
+      for (ConceptSetComponent inc : valueset.getCompose().getInclude()) {
+        serverCount = serverCount + checkValueSetLoad(inc, info);
+      }
+      for (ConceptSetComponent inc : valueset.getCompose().getExclude()) {
+        serverCount = serverCount + checkValueSetLoad(inc, info);
+      }
+    }
+    return serverCount;
+  }
+  
+  private int checkValueSetLoad(ConceptSetComponent inc, ValidationProcessInfo info) {
+    int serverCount = 0;
+    for (UriType uri : inc.getValueSet()) {
+      ValueSetValidator vsv = getVSVal(uri, info);
+      serverCount += vsv.getServerLoad(info);
+    }
+    CodeSystem cs = resolveCodeSystem(inc.getSystem(), inc.getVersion());
+    if (cs == null || (cs.getContent() != CodeSystemContentMode.COMPLETE && cs.getContent() != CodeSystemContentMode.FRAGMENT)) {
+      serverCount++;
+    }
+    return serverCount;
+  }
+
   private boolean checkRequiredSupplements(ValidationProcessInfo info) {
     if (!requiredSupplements.isEmpty()) {
       String msg= context.formatMessagePlural(requiredSupplements.size(), I18nConstants.VALUESET_SUPPLEMENT_MISSING, CommaSeparatedStringBuilder.build(requiredSupplements));
@@ -1297,19 +1340,19 @@ public class ValueSetValidator extends ValueSetProcessBase {
       if (isValueSetUnionImports()) {
         ok = false;
         for (UriType uri : vsi.getValueSet()) {
-          if (inImport(path, uri.getValue(), system, version, code, info)) {
+          if (inImport(path, uri, system, version, code, info)) {
             return true;
           }
         }
       } else {
-        Boolean bok = inImport(path, vsi.getValueSet().get(0).getValue(), system, version, code, info);
+        Boolean bok = inImport(path, vsi.getValueSet().get(0), system, version, code, info);
         if (bok == null) {
           return bok;
         }
         ok = bok;
         for (int i = 1; i < vsi.getValueSet().size(); i++) {
           UriType uri = vsi.getValueSet().get(i);
-          ok = ok && inImport(path, uri.getValue(), system, version, code, info); 
+          ok = ok && inImport(path, uri, system, version, code, info); 
         }
       }
     }
@@ -1581,8 +1624,17 @@ public class ValueSetValidator extends ValueSetProcessBase {
     return vsc;
   }
 
-  private Boolean inImport(String path, String uri, String system, String version, String code, ValidationProcessInfo info) throws FHIRException {
-    ValueSetValidator vs = getVs(uri, info);
+  private ValueSetValidator getVSVal(UriType uri, ValidationProcessInfo info) { 
+    ValueSetValidator vs = (ValueSetValidator) uri.getUserData("tx-fhir-cache");
+    if (vs == null) {
+      vs = getVs(uri.getValue(), info);
+      uri.setUserData("tx-fhir-cache", vs);
+    }
+    return vs;    
+  }
+  
+  private Boolean inImport(String path, UriType uri, String system, String version, String code, ValidationProcessInfo info) throws FHIRException {
+    ValueSetValidator vs = getVSVal(uri, info);
     if (vs == null) {
       return false;
     } else {

From f4096319a30855800e8d8cf3abfd3b96a630e633 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Tue, 24 Sep 2024 20:42:48 -0400
Subject: [PATCH 51/68] Add support for -txCache parameter

---
 .../fhir/validation/cli/services/ValidationService.java   | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java
index 82abdff63..c11060368 100644
--- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java
+++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java
@@ -529,14 +529,18 @@ public class ValidationService {
   }
 
   @Nonnull
-  protected ValidationEngine buildValidationEngine( CliContext cliContext, String definitions, TimeTracker timeTracker) throws IOException, URISyntaxException {
+  protected ValidationEngine buildValidationEngine(CliContext cliContext, String definitions, TimeTracker timeTracker) throws IOException, URISyntaxException {
     System.out.print("  Load FHIR v" + cliContext.getSv() + " from " + definitions);
     ValidationEngine validationEngine = getValidationEngineBuilder().withTHO(false).withVersion(cliContext.getSv()).withTimeTracker(timeTracker).withUserAgent(Common.getValidatorUserAgent()).fromSource(definitions);
 
     System.out.println(" - " + validationEngine.getContext().countAllCaches() + " resources (" + timeTracker.milestone() + ")");
 
     loadIgsAndExtensions(validationEngine, cliContext, timeTracker);
-    if (validationEngine.getContext().getTxCache() == null) {
+    if (cliContext.getTxCache() != null) {
+      TerminologyCache cache = new TerminologyCache(new Object(), cliContext.getTxCache());
+      validationEngine.getContext().initTxCache(cache);
+    }
+    if (validationEngine.getContext().getTxCache().getFolder() == null) {
       System.out.println("  No Terminology Cache");      
     } else {
       System.out.println("  Terminology Cache at "+validationEngine.getContext().getTxCache().getFolder());

From ea04d9a96bcc7a568a9f4f4ae95266c284737c97 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Tue, 24 Sep 2024 20:43:14 -0400
Subject: [PATCH 52/68] update tx cache for tests

---
 .../instance/InstanceValidator.java           |    2 +-
 ...nologyCapabilities.local.fhir.org.r2.cache | 2600 ++++++++
 .../org.hl7.fhir.validation/1.0.2/servers.ini |    1 +
 ...nologyCapabilities.local.fhir.org.r3.cache | 5510 +++++++++++++++++
 .../org.hl7.fhir.validation/1.4.0/servers.ini |    1 +
 ...nologyCapabilities.local.fhir.org.r3.cache | 5510 +++++++++++++++++
 .../org.hl7.fhir.validation/3.0.2/servers.ini |    1 +
 ...nologyCapabilities.local.fhir.org.r4.cache | 3751 +++++++++++
 .../4.0.1/http___www.ada.org_snodent.cache    |   60 +-
 .../org.hl7.fhir.validation/4.0.1/servers.ini |    1 +
 10 files changed, 17435 insertions(+), 2 deletions(-)
 create mode 100644 org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.0.2/.terminologyCapabilities.local.fhir.org.r2.cache
 create mode 100644 org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.4.0/.terminologyCapabilities.local.fhir.org.r3.cache
 create mode 100644 org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/.terminologyCapabilities.local.fhir.org.r3.cache
 create mode 100644 org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/.terminologyCapabilities.local.fhir.org.r4.cache

diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java
index e84005747..9ea21787d 100644
--- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java
+++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java
@@ -1654,7 +1654,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
                 }
               } else if (vr.getErrorClass() != null && vr.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED) {
                 // we've already handled the warnings / errors about this, and set the status correctly. We don't need to do anything more?
-              } else {
+              } else if (vr.getErrorClass() != TerminologyServiceErrorClass.SERVER_ERROR) { // (should have?) already handled server error
                 if (strength == BindingStrength.REQUIRED) {
                   bh.see(txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_1_CC, describeReference(vsRef, valueset, bc, usageNote), ccSummary(cc)));
                 } else if (strength == BindingStrength.EXTENSIBLE) {
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.0.2/.terminologyCapabilities.local.fhir.org.r2.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.0.2/.terminologyCapabilities.local.fhir.org.r2.cache
new file mode 100644
index 000000000..e232d950f
--- /dev/null
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.0.2/.terminologyCapabilities.local.fhir.org.r2.cache
@@ -0,0 +1,2600 @@
+{
+  "resourceType" : "TerminologyCapabilities",
+  "codeSystem" : [{
+    "uri" : "http://acme.com/config/fhir/codesystems/cholesterol"
+  },
+  {
+    "uri" : "http://fdasis.nlm.nih.gov"
+  },
+  {
+    "uri" : "http://fhir.ohdsi.org/CodeSystem/concepts"
+  },
+  {
+    "uri" : "http://healthit.gov/nhin/purposeofuse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/account-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/actionlist"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/additionalmaterials"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/address-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/address-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjudication"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjudication-error"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjustment-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/administrative-gender"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/admit-source"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-criticality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-breed"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-genderstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-species"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/answer-format"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/appointmentstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/appropriateness-score"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-direction-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-operator-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-response-code-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-action"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/basic-resource-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/binding-strength"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/bundle-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-activity-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-activity-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-relationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/choice-list-orientation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claim-type-link"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claim-use-link"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/classification-or-context"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/clinical-impression-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/communication-request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/communication-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composition-attestation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composition-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-map-equivalence"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-clinical"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-ver-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conditional-delete-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conformance-expectation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conformance-resource-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conformance-statement-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/constraint-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contact-point-system"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contact-point-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contactentity-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/content-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contractsignertypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contractsubtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttermsubtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttermtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/data-absent-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/data-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/dataelement-stringency"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/days-of-week"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/detectedissue-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-action"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-use-request-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-use-request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/devicestatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diagnostic-order-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diagnostic-order-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diagnostic-report-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diet"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/digital-media-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/discharge-disposition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-reference-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-class"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-location-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-special-arrangements"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/entformula-additive"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/episode-of-care-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-fdi"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-oralprostho"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-pharmaservice"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-serviceproduct"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-surface"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-udi"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-USCLS"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-visionprescriptionproduct"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/exception"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extension-context"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/FDI-surface"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/filter-operator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-priority-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flagCategory"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fm-conditions"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/forms-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fundsreserve"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-acceptance-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-status-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/group-special-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/group-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-dependency-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-page-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-resource-purpose"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/history-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/http-verb"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identifier-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identifier-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identity-assuranceLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/immunization-recommendation-date-criterion"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/immunization-recommendation-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/intervention"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/issue-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/issue-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/link-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-empty-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-example-use-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-order"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-physical-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/marital-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measurement-principle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/media-subtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-admin-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-dispense-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-order-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-statement-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-conformance-event-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-events"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-reasons-encounter"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-significance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-transport"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-calibration-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-calibration-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-color"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-operational-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/missingtoothreason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/modifiers"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/name-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/namingsystem-identifier-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/namingsystem-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/narrative-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/network-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/note-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/nutrition-order-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/object-lifecycle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/object-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/object-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/obs-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-relationshiptypes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-parameter-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/order-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/organization-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participantrequired"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participantstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participationstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/patient-contact-relationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/patient-mpi-match"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/payeetype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/payment-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/paymentstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/practitioner-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/practitioner-specialty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/procedure-progress-status-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/procedure-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/procedure-request-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/procedure-request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/procedure-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/processoutcomecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/processpriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/property-representation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/provenance-entity-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/provenance-participant-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/provenance-participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/qicore-adverseevent-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/qicore-adverseevent-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/qicore-communication-medium"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/qicore-condition-criticality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/qicore-diagnosticorder-precondition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/qicore-military-service"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/qicore-observation-verification-method"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/quantity-comparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/question-max-occurs"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-answers-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-question-control"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reaction-event-certainty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reaction-event-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reason-medication-given"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reason-medication-not-given"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/referencerange-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/referralstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/relationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/remittance-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-aggregation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-slicing-rules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-validation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/response-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-conformance-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-interaction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-security-service"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/risk-probability"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ruleset"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-entry-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-modifier-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-param-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-xpath-usage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/security-source-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-provision-conditions"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-referral-method"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/ndc"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/slotstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/special-values"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/specimen-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/structure-definition-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-channel-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-tag"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/substance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supply-item-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supply-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplydelivery-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplyrequest-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplyrequest-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/testscript-operation-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/timing-abbreviation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/transaction-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/unknown-content-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uslab-event"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0001"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0002"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0003"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0004"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0006/2.1"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0006/2.4"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0007"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0008"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0009"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0012"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0017"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0023"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0027"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0033"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0034"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0038"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0043"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0048"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0052"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0061"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0062"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0063"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0065"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0066"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0069"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0070"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0074"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0076"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0078"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0080"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0083"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0085"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0091"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0092"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0098"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0100"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0102"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0103"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0104"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0105"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0106"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0107"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0108"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0109"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0116"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0119"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0121"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0122"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0123"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0124"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0126"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0127"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0128"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0130"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0131"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0133"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0135"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0136"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0137"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0140"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0141"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0142"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0144"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0145"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0146"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0147"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0148"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0149"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0150"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0153"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0155"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0156"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0157"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0158"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0159"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0160"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0161"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0162"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0163"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0164"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0165"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0166"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0167"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0168"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0169"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0170"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0173"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0174"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0175"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0177"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0178"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0179"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0180"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0181"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0183"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0185"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0187"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0189"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0190"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0191"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0193"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0200"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0201"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0202"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0203"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0204"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0205"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0206"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0207"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0208"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0209"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0210"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0211"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0213"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0214"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0215"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0216"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0217"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0220"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0223"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0224"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0225"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0227"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0228"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0229"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0230"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0231"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0232"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0234"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0235"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0236"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0237"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0238"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0239"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0240"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0241"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0242"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0243"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0247"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0248"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0250"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0251"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0252"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0253"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0254"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0255"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0256"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0257"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0258"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0259"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0260"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0261"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0262"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0263"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0265"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0267"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0268"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0269"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0270"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0271"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0272"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0273"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0275"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0276"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0277"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0278"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0279"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0280"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0281"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0282"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0283"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0284"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0286"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0287"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0290"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0291"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0292"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0294"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0298"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0299"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0301"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0305"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0309"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0311"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0315"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0316"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0317"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0321"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0322"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0323"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0324"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0325"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0326"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0329"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0330"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0331"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0332"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0334"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0335"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0336"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0337"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0338"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0339"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0344"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0350"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0351"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0353"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0354"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0355"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0356"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0357"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0359"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0360/2.3.1"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0360/2.7"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0363"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0364"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0365"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0366"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0367"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0368"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0369"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0370"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0371"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0372"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0373"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0374"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0375"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0376"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0377"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0383"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0384"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0387"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0388"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0389"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0391/2.4"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0391/2.6"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0392"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0393"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0394"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0395"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0396"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0397"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0398"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0401"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0402"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0403"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0404"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0406"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0409"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0411"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0415"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0416"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0417"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0418"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0421"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0422"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0423"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0424"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0425"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0426"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0427"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0428"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0429"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0430"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0431"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0432"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0433"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0434"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0435"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0436"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0437"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0438"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0440"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0441"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0442"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0443"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0444"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0445"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0450"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0452"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0453"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0454"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0455"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0456"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0457"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0459"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0460"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0465"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0466"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0468"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0469"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0470"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0472"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0473"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0474"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0475"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0477"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0478"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0480"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0482"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0483"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0484"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0485"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0487"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0488"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0489"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0490"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0491"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0492"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0493"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0494"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0495"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0496"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0497"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0498"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0499"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0500"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0501"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0502"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0503"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0504"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0505"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0506"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0507"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0508"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0510"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0511"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0513"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0514"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0516"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0517"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0518"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0520"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0523"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0524"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0527"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0528"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0529"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0530"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0534"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0535"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0536"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0538"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0540"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0544"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0547"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0548"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0550"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0552"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0553"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0554"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0555"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0556"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0557"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0558"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0559"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0561"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0562"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0564"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0565"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0566"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0569"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0570"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0571"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0572"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0615"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0616"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0617"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0618"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0625"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0634"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0642"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0651"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0653"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0657"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0659"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0667"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0669"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0682"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0702"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0717"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0719"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0725"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0728"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0731"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0734"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0739"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0742"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0749"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0755"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0757"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0759"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0761"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0763"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0776"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0778"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0790"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0793"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0806"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0818"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0834"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0868"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0871"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0881"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0882"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0894"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0895"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0904"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0905"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0906"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0907"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0909"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0912"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0914"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0916"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0917"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0918"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0919"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0920"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0921"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0922"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0923"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0924"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0925"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0926"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0927"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0933"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0935"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/4000"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementCondition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementDetailCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementDetailType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActExposureLevelCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActInvoiceElementModifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActMood"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActReason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipCheckpoint"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipJoin"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipSplit"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipSubset"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActSite"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActUncertainty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActUSPrivacyLaw"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AddressPartType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AddressUse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AdministrativeGender"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AmericanIndianAlaskaNativeLanguages"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Calendar"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CalendarCycle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CalendarType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Charset"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CodingRationale"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CommunicationFunctionType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CompressionAlgorithm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Confidentiality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContainerCap"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContainerSeparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContentProcessingMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContextControl"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DataOperation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DeviceAlertLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DocumentCompletion"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DocumentStorage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EducationLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EmployeeJobClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EncounterAdmissionSource"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EncounterSpecialCourtesy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityDeterminer"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityHandling"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartQualifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartQualifierR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartTypeR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNameUse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNameUseR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityRisk"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EquipmentAlertLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Ethnicity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ExposureMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/GenderStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/GTSAbbreviation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/hl7Realm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/HL7UpdateMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/hl7V3Conformance"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/HtmlLinkType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IdentifierReliability"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IdentifierScope"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IntegrityCheckAlgorithm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LanguageAbilityMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LanguageAbilityProficiency"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LivingArrangement"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LocalMarkupIgnore"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LocalRemoteControlState"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ManagedParticipationStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MapRelationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MaritalStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MessageWaitingPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ModifyIndicator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/NullFlavor"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationInterpretation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationMethod"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationValue"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/orderableDrugForm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationFunction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationSignature"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PatientImportance"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PaymentTerms"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PersonDisabilityType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProbabilityDistributionType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProcessingID"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProcessingMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryParameterValue"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryRequestLimit"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryResponse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryStatusCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Race"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RelationalOperator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RelationshipConjunction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ReligiousAffiliation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseModality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleLinkStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleLinkType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RouteOfAdministration"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Sequencing"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SetOperator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SpecimenType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/substanceAdminSubstitution"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SubstitutionCondition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellHorizontalAlign"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellScope"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellVerticalAlign"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableFrame"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableRules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TargetAwareness"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TelecommunicationCapabilities"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TimingEvent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TransmissionRelationshipTypeCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TribalEntityUS"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/VaccineManufacturer"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vaccination-protocol-dose-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vaccination-protocol-dose-status-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/valueset-signature-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/versioning-policy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vision-base-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vision-eye-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/xds-relationship-type"
+  },
+  {
+    "uri" : "http://loinc.org"
+  },
+  {
+    "uri" : "http://loinc.org/vs/LL2654-3"
+  },
+  {
+    "uri" : "http://nema.org/dicom/dicm"
+  },
+  {
+    "uri" : "http://snomed.info/sct"
+  },
+  {
+    "uri" : "http://unitsofmeasure.org"
+  },
+  {
+    "uri" : "http://unstats.un.org/unsd/methods/m49/m49.htm"
+  },
+  {
+    "uri" : "http://varnomen.hgvs.org"
+  },
+  {
+    "uri" : "http://www.abs.gov.au/ausstats/abs@.nsf/mf/1220.0"
+  },
+  {
+    "uri" : "http://www.ama-assn.org/go/cpt"
+  },
+  {
+    "uri" : "http://www.hl7.org/fhir/contractaction"
+  },
+  {
+    "uri" : "http://www.hl7.org/fhir/contractactorrole"
+  },
+  {
+    "uri" : "http://www.nlm.nih.gov/research/umls/rxnorm"
+  },
+  {
+    "uri" : "https://www.usps.com/"
+  },
+  {
+    "uri" : "urn:ietf:bcp:13"
+  },
+  {
+    "uri" : "urn:ietf:bcp:47"
+  },
+  {
+    "uri" : "urn:ietf:rfc:3986"
+  },
+  {
+    "uri" : "urn:iso:std:iso:3166"
+  },
+  {
+    "uri" : "urn:iso:std:iso:4217"
+  },
+  {
+    "uri" : "urn:oid:1.2.36.1.2001.1001.101.104.16592"
+  },
+  {
+    "uri" : "urn:oid:1.2.36.1.2001.1005.17"
+  }],
+  "expansion" : {
+    "parameter" : [{
+      "name" : "cache-id"
+    },
+    {
+      "name" : "tx-resource"
+    },
+    {
+      "name" : "_incomplete"
+    },
+    {
+      "name" : "abstract"
+    },
+    {
+      "name" : "activeOnly"
+    },
+    {
+      "name" : "check-system-version"
+    },
+    {
+      "name" : "count"
+    },
+    {
+      "name" : "default-to-latest-version"
+    },
+    {
+      "name" : "displayLanguage"
+    },
+    {
+      "name" : "excludeNested"
+    },
+    {
+      "name" : "excludeNotForUI"
+    },
+    {
+      "name" : "excludePostCoordinated"
+    },
+    {
+      "name" : "force-system-version"
+    },
+    {
+      "name" : "inactive"
+    },
+    {
+      "name" : "includeAlternateCodes"
+    },
+    {
+      "name" : "includeDefinition"
+    },
+    {
+      "name" : "includeDesignations"
+    },
+    {
+      "name" : "incomplete-ok"
+    },
+    {
+      "name" : "limitedExpansion"
+    },
+    {
+      "name" : "mode"
+    },
+    {
+      "name" : "no-cache"
+    },
+    {
+      "name" : "offset"
+    },
+    {
+      "name" : "profile"
+    },
+    {
+      "name" : "property"
+    },
+    {
+      "name" : "system-version"
+    },
+    {
+      "name" : "valueSetMode"
+    }]
+  }
+}
\ No newline at end of file
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.0.2/servers.ini b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.0.2/servers.ini
index 5c2b3f97a..ea43c1050 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.0.2/servers.ini
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.0.2/servers.ini
@@ -1,3 +1,4 @@
 [servers]
 tx-dev.fhir.org.r2 = http://tx-dev.fhir.org/r2
+local.fhir.org.r2 = http://local.fhir.org/r2
 
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.4.0/.terminologyCapabilities.local.fhir.org.r3.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.4.0/.terminologyCapabilities.local.fhir.org.r3.cache
new file mode 100644
index 000000000..39ea92d1e
--- /dev/null
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.4.0/.terminologyCapabilities.local.fhir.org.r3.cache
@@ -0,0 +1,5510 @@
+{
+  "resourceType" : "TerminologyCapabilities",
+  "codeSystem" : [{
+    "uri" : "http://devices.fhir.org/CodeSystem/MDC-concept-status"
+  },
+  {
+    "uri" : "http://devices.fhir.org/CodeSystem/MDC-designation-use"
+  },
+  {
+    "uri" : "http://dicom.nema.org/resources/ontology/DCM"
+  },
+  {
+    "uri" : "http://fdasis.nlm.nih.gov"
+  },
+  {
+    "uri" : "http://fhir.ohdsi.org/CodeSystem/concepts"
+  },
+  {
+    "uri" : "http://healthit.gov/nhin/purposeofuse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/abstract-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/account-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-cardinality-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-condition-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-grouping-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-precheck-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-required-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-selection-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/actionlist"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/activity-definition-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/additionalmaterials"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/address-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/address-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjudication"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjudication-error"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjudication-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/administrative-gender"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/admit-source"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-causality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-causality-assess"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-causality-method"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-causality-result"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-seriousness"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allerg-intol-substance-exp-risk"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-clinical-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-criticality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-verification-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-genderstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-species"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/appointmentstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-direction-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-operator-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-response-code-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-entity-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-action"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/basic-resource-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-network"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-subcategory"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-term"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-unit"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/binding-strength"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/bundle-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/capability-statement-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-activity-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-activity-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-team-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-team-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/chargeitem-billingcodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/chargeitem-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/choice-list-orientation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/chromosome-human"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claim-exception"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claim-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claimcareteamrole"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claiminformationcategory"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/classification-or-context"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/clinical-impression-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/codesystem-content-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/codesystem-hierarchy-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/example"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/summary"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/common-tags"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/communication-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/communication-not-done-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/compartment-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composite-measure-scoring"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composition-attestation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composition-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-map-equivalence"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-properties"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-property-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conceptmap-unmapped-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-clinical"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-ver-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conditional-delete-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conditional-read-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conformance-expectation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-data-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-except-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-state-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consentaction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consentcategorycodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/constraint-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contact-point-system"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contact-point-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contactentity-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/content-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-content-derivative"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contractsubtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttermsubtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttermtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contributor-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/copy-number-event"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/coverage-level"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/coverage-selfpay"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/data-absent-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/data-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/dataelement-stringency"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/days-of-week"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/definition-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/definition-topic"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/detectedissue-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-action"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-statement-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diagnosis-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diagnostic-report-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/dicom-audit-lifecycle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diet"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/digital-media-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/discharge-disposition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/discriminator-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-reference-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-location-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-special-arrangements"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/endpoint-connection-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/endpoint-payload-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/endpoint-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/entformula-additive"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/episode-of-care-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/episodeofcare-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-capability-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-timing"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/evidence-quality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-claimitemtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-claimsubtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-claimtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-diagnosisrelatedgroup"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-diagnosistype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-fdi"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-onsettype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-oralprostho"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-payee-resource-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-paymenttype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-pharmaservice"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-programcode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-providerqualification"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-relatedclaimrelationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-revenue-center"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-servicemodifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-serviceplace"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-serviceproduct"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-tooth"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-udi"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-USCLS"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-visionprescriptionproduct"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/explanationofbenefit-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extension-context"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extra-activity-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extra-security-role-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/FDI-surface"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/filter-operator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-priority-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fm-conditions"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fm-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/forms-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fundsreserve"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-acceptance-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-status-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/graph-compartment-rule"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/group-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guidance-response-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-dependency-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-page-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/history-not-done-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/history-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/hl7-work-group"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/http-operations"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/http-verb"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identifier-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identifier-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identity-assuranceLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/immunization-origin"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/immunization-recommendation-date-criterion"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/immunization-recommendation-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/implant-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/intervention"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/iso-21089-lifecycle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/issue-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/issue-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/item-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/library-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/link-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/linkage-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-empty-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-example-use-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-order"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-physical-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-context-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-group-type-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-input-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-model-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-source-list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-target-list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-transform"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/marital-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/match-grade"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-data-usage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-population"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-report-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-report-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-scoring"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measurement-principle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/media-subtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-admin-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-admin-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-dispense-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-dispense-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-package-form"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-request-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-request-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-request-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-statement-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-statement-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-statement-taken"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-events"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-reasons-encounter"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-significance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-transport"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/messageheader-response-request"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-calibration-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-calibration-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-color"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-operational-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/missingtoothreason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/modifiers"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/name-assembly-order"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/name-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/namingsystem-identifier-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/namingsystem-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/narrative-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/network-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/note-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/nutrition-request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/object-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-relationshiptypes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-statistics"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-parameter-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operational-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/organization-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/parameter-group"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participantrequired"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participationstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/payeetype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/payment-adjustment-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/payment-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/paymentstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/plan-definition-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/policyholder-relationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/practitioner-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/practitioner-specialty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/procedure-progress-status-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/processoutcomecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/processpriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/property-representation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/provenance-entity-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/publication-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/quality-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/quantity-comparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/question-max-occurs"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-answers-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-display-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-item-control"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-usage-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reaction-event-certainty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reaction-event-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reason-medication-given"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reason-medication-not-given"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/recommendation-strength"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reference-handling-policy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reference-version-rules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/referencerange-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/related-artifact-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/relationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/remittance-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-action-result-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-result-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-status-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/repository-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/research-study-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/research-subject-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-aggregation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-slicing-rules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-type-link"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-validation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/response-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-capability-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-interaction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-security-service"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/risk-probability"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-comparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-entry-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-modifier-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-param-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-xpath-usage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/security-source-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sequence-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-provision-conditions"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-referral-method"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/cvx"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/ex-icd-10-procedures"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-10"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-10-cm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-9-cm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/mvx"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/ndc"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/slotstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/spdx-license"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/special-values"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/specification-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/specimen-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/structure-definition-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-channel-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-tag"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/substance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/substance-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supply-item-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supply-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplydelivery-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplyrequest-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplyrequest-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/system-version-processing-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/task-performer-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/task-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/testscript-operation-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/testscript-profile-destination-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/testscript-profile-origin-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/transaction-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/trigger-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/type-derivation-rule"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/udi-entry-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/unknown-content-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/usage-context-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0001"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0002"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0003"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0004"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0006/2.1"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0006/2.4"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0007"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0008"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0009"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0012"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0017"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0023"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0027"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0033"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0034"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0038"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0043"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0048"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0052"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0061"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0062"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0063"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0065"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0066"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0069"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0070"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0074"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0076"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0078"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0080"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0083"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0085"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0091"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0092"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0098"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0100"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0102"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0103"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0104"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0105"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0106"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0107"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0108"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0109"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0116"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0119"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0121"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0122"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0123"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0124"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0126"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0127"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0128"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0130"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0131"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0133"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0135"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0136"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0137"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0140"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0141"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0142"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0144"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0145"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0146"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0147"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0148"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0149"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0150"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0153"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0155"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0156"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0157"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0158"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0159"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0160"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0161"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0162"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0163"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0164"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0165"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0166"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0167"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0168"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0169"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0170"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0173"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0174"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0175"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0177"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0178"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0179"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0180"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0181"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0183"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0185"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0187"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0189"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0190"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0191"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0193"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0200"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0201"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0202"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0203"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0204"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0205"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0206"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0207"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0208"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0209"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0210"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0211"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0213"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0214"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0215"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0216"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0217"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0220"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0223"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0224"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0225"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0227"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0228"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0229"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0230"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0231"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0232"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0234"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0235"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0236"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0237"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0238"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0239"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0240"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0241"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0242"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0243"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0247"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0248"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0250"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0251"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0252"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0253"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0254"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0255"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0256"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0257"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0258"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0259"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0260"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0261"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0262"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0263"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0265"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0267"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0268"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0269"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0270"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0271"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0272"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0273"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0275"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0276"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0277"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0278"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0279"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0280"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0281"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0282"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0283"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0284"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0286"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0287"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0290"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0291"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0292"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0294"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0298"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0299"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0301"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0305"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0309"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0311"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0315"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0316"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0317"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0321"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0322"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0323"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0324"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0325"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0326"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0329"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0330"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0331"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0332"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0334"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0335"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0336"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0337"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0338"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0339"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0344"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0350"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0351"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0354"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0355"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0356"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0357"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0359"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0360/2.3.1"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0360/2.7"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0363"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0364"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0365"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0366"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0367"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0368"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0369"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0370"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0371"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0372"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0373"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0374"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0375"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0376"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0377"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0383"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0384"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0387"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0388"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0389"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0391/2.4"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0391/2.6"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0392"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0393"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0394"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0395"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0396"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0397"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0398"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0401"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0402"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0403"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0404"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0406"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0409"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0411"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0415"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0416"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0417"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0418"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0421"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0422"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0423"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0424"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0425"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0426"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0427"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0428"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0429"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0430"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0431"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0432"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0433"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0434"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0435"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0436"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0437"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0438"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0440"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0441"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0442"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0443"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0444"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0445"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0450"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0455"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0456"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0457"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0459"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0460"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0465"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0466"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0468"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0469"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0470"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0472"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0473"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0474"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0475"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0477"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0478"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0480"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0482"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0483"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0484"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0485"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0487"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0488"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0489"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0490"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0491"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0492"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0493"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0494"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0495"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0496"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0497"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0498"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0499"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0500"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0501"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0502"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0503"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0504"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0505"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0506"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0507"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0508"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0510"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0511"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0513"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0514"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0516"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0517"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0518"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0520"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0523"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0524"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0527"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0528"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0529"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0530"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0534"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0535"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0536"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0538"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0540"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0544"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0547"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0548"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0550"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0553"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0554"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0555"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0556"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0557"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0558"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0559"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0561"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0562"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0564"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0565"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0566"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0569"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0570"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0571"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0572"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0615"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0616"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0617"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0618"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0625"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0634"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0642"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0651"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0653"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0657"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0659"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0667"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0669"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0682"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0702"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0717"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0719"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0725"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0728"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0731"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0734"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0739"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0742"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0749"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0755"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0757"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0759"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0761"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0763"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0776"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0778"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0790"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0793"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0806"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0818"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0834"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0868"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0871"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0881"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0882"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0894"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0895"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0904"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0905"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0906"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0907"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0909"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0912"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0914"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0916"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0917"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0918"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0919"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0920"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0921"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0922"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0923"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0924"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0925"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0926"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0927"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0933"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0935"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/4000"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementCondition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementDetailCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementDetailType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActExposureLevelCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActInvoiceElementModifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActMood"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActReason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipCheckpoint"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipJoin"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipSplit"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipSubset"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActSite"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActUncertainty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActUSPrivacyLaw"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AddressPartType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AddressUse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AdministrativeGender"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AmericanIndianAlaskaNativeLanguages"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Calendar"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CalendarCycle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CalendarType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Charset"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CodingRationale"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CommunicationFunctionType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CompressionAlgorithm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Confidentiality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContainerCap"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContainerSeparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContentProcessingMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContextControl"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DataOperation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DeviceAlertLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DocumentCompletion"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DocumentStorage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EducationLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EmployeeJobClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EncounterAdmissionSource"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EncounterSpecialCourtesy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityDeterminer"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityHandling"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartQualifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartQualifierR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartTypeR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNameUse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNameUseR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityRisk"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EquipmentAlertLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Ethnicity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ExposureMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/GenderStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/GTSAbbreviation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/hl7Realm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/HL7UpdateMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/hl7V3Conformance"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/HtmlLinkType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IdentifierReliability"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IdentifierScope"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IntegrityCheckAlgorithm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LanguageAbilityMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LanguageAbilityProficiency"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LivingArrangement"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LocalMarkupIgnore"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LocalRemoteControlState"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ManagedParticipationStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MapRelationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MaritalStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MessageWaitingPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ModifyIndicator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/NullFlavor"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationInterpretation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationMethod"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationValue"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/orderableDrugForm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationFunction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationSignature"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PatientImportance"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PaymentTerms"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PersonDisabilityType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProbabilityDistributionType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProcessingID"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProcessingMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryParameterValue"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryRequestLimit"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryResponse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryStatusCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Race"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RelationalOperator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RelationshipConjunction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ReligiousAffiliation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseModality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleLinkStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleLinkType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RouteOfAdministration"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Sequencing"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SetOperator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SpecimenType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/substanceAdminSubstitution"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SubstitutionCondition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellHorizontalAlign"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellScope"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellVerticalAlign"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableFrame"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableRules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TargetAwareness"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TelecommunicationCapabilities"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TimingEvent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TransmissionRelationshipTypeCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TribalEntityUS"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/VaccineManufacturer"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vaccination-protocol-dose-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vaccination-protocol-dose-status-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/variant-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/versioning-policy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vision-base-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vision-eye-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/w3c-provenance-activity-type"
+  },
+  {
+    "uri" : "http://loinc.org"
+  },
+  {
+    "uri" : "http://nucc.org/provider-taxonomy"
+  },
+  {
+    "uri" : "http://radlex.org"
+  },
+  {
+    "uri" : "http://snomed.info/sct"
+  },
+  {
+    "uri" : "http://standardterms.edqm.eu"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/action-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/activity-definition-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication-error"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/admit-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-causality-assess"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-causality-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-seriousness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-severity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allerg-intol-substance-exp-risk"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/applicability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/attribute-estimate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-entity-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-event-outcome"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-event-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/basic-resource-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-network"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-term"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-unit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/can-push-updates"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/catalogType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-rating"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-rating"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/characteristic-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/chargeitem-billingcodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/choice-list-orientation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/chromosome-human"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claim-exception"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claim-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claimcareteamrole"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claiminformationcategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/codesystem-altcode-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/common-tags"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-not-done-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-topic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/composite-measure-scoring"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/composition-altcode-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/conceptdomains"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-clinical"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-ver-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/conformance-expectation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentaction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentcategorycodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentpolicycodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentscope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentverification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contactentity-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/container-cap"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-content-derivative"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-data-meaning"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractaction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractactorrole"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractsignertypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractsubtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contracttermsubtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contracttermtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/copy-number-event"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-class"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-copay-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-selfpay"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverageeligibilityresponse-ex-auth-support"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/data-absent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-topic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-use"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/device-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/diagnosis-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/diet"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/directness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/discharge-disposition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/dose-rate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-special-arrangements"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-subject-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/endpoint-connection-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/endpoint-payload-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/entformula-additive"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/episodeofcare-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/evidence-quality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-benefitcategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-claimsubtype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-coverage-financial-exception"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosisrelatedgroup"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosistype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-payee-resource-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-paymenttype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-procedure-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-programcode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-providerqualification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-relatedclaimrelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-revenue-center"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-serviceplace"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-tooth"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-USCLS"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-visionprescriptionproduct"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/expansion-parameter-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/expansion-processing-rule"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/extra-security-role-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/failure-action"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/FDI-surface"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/financialtaskcode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/financialtaskinputtype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/flag-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/forms-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/fundsreserve"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-acceptance-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-achievement"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-priority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-relationship-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/guide-parameter-code"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/handling-condition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/history-absent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/hl7-work-group"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/hl7TermMaintInfra"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/icd-o-3"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-funding-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-origin"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-program-eligibility"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-recommendation-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-subpotent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/implantStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/insurance-plan-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/library-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-empty-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-example-use-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-order"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/location-physical-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/match-grade"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-data-usage"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-improvement-notation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-population"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-scoring"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/med-admin-perform-function"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/media-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-usage-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationdispense-performer-function"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-characteristic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-package-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-course-of-therapy"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/message-reasons-encounter"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/missingtoothreason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/modifiers"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/name-assembly-order"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/need"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/nutrition-intake-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/object-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/observation-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/observation-statistics"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/operation-outcome"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/organization-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/parameter-group"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/participant-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payeetype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payment-adjustment-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payment-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/paymentstatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/plan-definition-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/practitioner-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/primary-source-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/processpriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/program"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/push-type-available"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/question-max-occurs"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/questionnaire-usage-mode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/reaction-event-certainty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/reason-medication-given"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/recommendation-strength"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/referencerange-meaning"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/rejection-criteria"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-objective-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-phase"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-prim-purp-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-reason-stopped"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-milestone"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-state-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/resource-security-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/resource-type-link"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/risk-probability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/security-source-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/service-provision-conditions"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/service-referral-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/smart-capabilities"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/special-values"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/standards-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/state-change-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/statistic-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/study-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscriber-relationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-channel-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-error"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-status-at-event"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-tag"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/substance-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supply-item-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supply-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supplyrequest-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/synthesis-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-operation-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-profile-destination-types"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-profile-origin-types"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/triggerEventID"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/usage-context-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/utg-concept-properties"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0001"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0002"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0003"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0004"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0005"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0006"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0007"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0008"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0009"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0012"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0017"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0027"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0033"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0034"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0038"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0048"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0052"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0061"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0062"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0063"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0065"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0066"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0069"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0070"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0074"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0076"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0080"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0083"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0085"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0091"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0092"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0098"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0100"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0102"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0103"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0104"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0105"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0106"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0107"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0108"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0109"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0116"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0119"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0121"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0122"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0123"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0124"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0126"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0127"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0128"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0130"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0131"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0133"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0135"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0137"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0140"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0142"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0144"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0145"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0146"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0147"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0148"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0149"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0150"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0155"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0156"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0157"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0158"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0159"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0160"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0161"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0162"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0163"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0164"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0165"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0166"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0167"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0168"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0169"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0170"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0173"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0174"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0175"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0177"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0178"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0179"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0180"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0181"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0183"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0185"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0187"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0189"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0190"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0191"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0193"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0200"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0201"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0202"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0203"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0204"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0205"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0206"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0207"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0208"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0209"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0210"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0211"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0213"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0214"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0215"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0216"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0217"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0220"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0223"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0224"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0225"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0227"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0228"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0230"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0231"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0232"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0234"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0235"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0236"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0237"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0238"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0239"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0240"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0241"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0242"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0243"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0247"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0248"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0250"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0251"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0252"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0253"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0254"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0255"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0256"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0257"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0258"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0260"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0261"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0262"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0263"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0265"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0267"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0268"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0269"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0270"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0271"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0272"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0273"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0275"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0276"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0277"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0278"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0279"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0280"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0281"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0282"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0283"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0284"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0286"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0287"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0290"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0291"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0294"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0298"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0299"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0301"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0305"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0309"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0311"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0315"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0316"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0317"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0321"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0322"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0323"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0324"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0325"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0326"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0329"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0330"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0331"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0332"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0334"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0335"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0336"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0337"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0339"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0344"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0353"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0354"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0355"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0356"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0357"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0359"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0360"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0364"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0365"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0366"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0367"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0368"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0369"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0370"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0371"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0372"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0373"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0374"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0375"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0376"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0377"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0383"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0384"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0387"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0388"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0389"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0391"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0392"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0393"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0394"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0395"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0396"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0397"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0398"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0401"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0402"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0403"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0404"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0406"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0409"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0415"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0416"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0417"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0418"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0421"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0422"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0423"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0424"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0425"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0426"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0427"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0428"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0429"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0430"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0431"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0432"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0433"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0434"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0435"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0436"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0437"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0438"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0440"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0441"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0442"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0443"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0444"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0445"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0450"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0457"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0465"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0466"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0468"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0469"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0470"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0472"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0473"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0474"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0475"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0477"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0478"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0480"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0482"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0483"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0484"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0485"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0487"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0488"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0489"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0490"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0491"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0492"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0493"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0494"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0495"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0496"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0497"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0498"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0499"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0500"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0501"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0502"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0503"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0504"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0505"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0506"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0507"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0508"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0510"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0511"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0513"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0514"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0516"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0517"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0518"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0520"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0523"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0524"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0527"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0528"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0529"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0530"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0532"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0534"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0535"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0536"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0538"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0540"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0544"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0547"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0548"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0550"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0553"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0554"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0555"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0556"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0557"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0558"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0559"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0560"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0561"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0562"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0564"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0565"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0566"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0569"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0570"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0571"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0572"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0615"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0616"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0617"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0618"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0625"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0634"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0642"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0651"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0653"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0657"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0659"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0667"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0669"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0682"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0702"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0717"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0728"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0731"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0734"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0739"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0742"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0749"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0755"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0757"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0759"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0761"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0763"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0776"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0778"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0790"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0793"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0806"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0818"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0834"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0868"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0871"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0881"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0882"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0894"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0904"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0905"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0906"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0907"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0909"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0912"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0914"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0916"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0917"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0918"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0919"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0920"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0921"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0922"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0923"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0924"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0925"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0926"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0927"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0933"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0935"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0936"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0937"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0938"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0939"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0940"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0942"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0945"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0946"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0948"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0949"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0950"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0951"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0970"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0971"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-4000"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-tables"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActExposureLevelCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActInvoiceElementModifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActMood"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActReason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipCheckpoint"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipJoin"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSplit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSubset"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActSite"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActUncertainty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActUSPrivacyLaw"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AddressPartType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AdministrativeGender"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AmericanIndianAlaskaNativeLanguages"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Calendar"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CalendarCycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CalendarType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Charset"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodeSystem"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodeSystemType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodingRationale"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CommunicationFunctionType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CompressionAlgorithm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptCodeRelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptGenerality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptProperty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Confidentiality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContainerCap"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContainerSeparator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContentProcessingMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContextControl"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Country"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Currency"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DataOperation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DataType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Dentition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DeviceAlertLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DocumentCompletion"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DocumentStorage"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EditStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EducationLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EmployeeJobClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAccident"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAcuity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAdmissionSource"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterReferralSource"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterSpecialCourtesy"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityDeterminer"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityHandling"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifierR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartTypeR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNameUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNameUseR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityRisk"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EquipmentAlertLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Ethnicity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ExposureMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-GenderStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HealthcareProviderTaxonomyHIPAA"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ApprovalStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7CMETAttribution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7CommitteeIDInRIM"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7ConformanceInclusion"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7ContextConductionStyle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7DefinedRoseProperty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7DocumentFormatCodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ITSType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ITSVersionCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingDomain"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSection"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSubSection"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7Realm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7StandardVersionCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7UpdateMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7V3Conformance"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7VoteResolution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HtmlLinkType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IdentifierReliability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IdentifierScope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IntegrityCheckAlgorithm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-1retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-2retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-3retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-iso4217-HL7"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityProficiency"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LivingArrangement"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LocalMarkupIgnore"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LocalRemoteControlState"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ManagedParticipationStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MapRelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaterialForm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaterialType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MDFAttributeType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfHmdMetSourceType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfHmdRowType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfRmimRowType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MDFSubjectAreaPrefix"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-mediaType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MessageCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MessageWaitingPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ModifyIndicator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationCategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationMethod"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationValue"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-OrganizationNameType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParameterizedDataType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationFunction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationSignature"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PatientImportance"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PaymentTerms"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PersonDisabilityType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PostalAddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProbabilityDistributionType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProcessingID"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProcessingMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryParameterValue"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryQuantityUnit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryRequestLimit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryResponse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryStatusCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Race"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RelationalOperator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RelationshipConjunction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ReligiousAffiliation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseModality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleLinkStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleLinkType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Sequencing"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SetOperator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SpecimenType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-styleType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SubstitutionCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellHorizontalAlign"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellScope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellVerticalAlign"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableFrame"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableRules"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TargetAwareness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationAddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationCapabilities"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TimingEvent"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TransmissionRelationshipTypeCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TribalEntityUS"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-URLScheme"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VaccineManufacturer"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VaccineType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VocabularyDomainQualifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-WorkClassificationODH"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-process"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/variable-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/variant-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/verificationresult-communication-method"
+  },
+  {
+    "uri" : "http://unitsofmeasure.org"
+  },
+  {
+    "uri" : "http://unstats.un.org/unsd/methods/m49/m49.htm"
+  },
+  {
+    "uri" : "http://varnomen.hgvs.org"
+  },
+  {
+    "uri" : "http://www.ada.org/snodent"
+  },
+  {
+    "uri" : "http://www.ama-assn.org/go/cpt"
+  },
+  {
+    "uri" : "http://www.hl7.org/fhir/contractaction"
+  },
+  {
+    "uri" : "http://www.hl7.org/fhir/contractactorrole"
+  },
+  {
+    "uri" : "http://www.hl7.org/fhir/contractsignertypecodes"
+  },
+  {
+    "uri" : "http://www.nlm.nih.gov/research/umls/rxnorm"
+  },
+  {
+    "uri" : "http://www.whocc.no/atc"
+  },
+  {
+    "uri" : "https://www.cms.gov/Medicare/Medicare-Fee-for-Service-Payment/HospitalAcqCond/Coding"
+  },
+  {
+    "uri" : "https://www.humanservices.gov.au/organisations/health-professionals/enablers/air-vaccine-code-formats"
+  },
+  {
+    "uri" : "https://www.iana.org/time-zones"
+  },
+  {
+    "uri" : "https://www.usps.com/"
+  },
+  {
+    "uri" : "urn:ietf:bcp:13"
+  },
+  {
+    "uri" : "urn:ietf:bcp:47"
+  },
+  {
+    "uri" : "urn:ietf:rfc:3986"
+  },
+  {
+    "uri" : "urn:iso-astm:E1762-95:2013"
+  },
+  {
+    "uri" : "urn:iso:std:iso:11073:10101"
+  },
+  {
+    "uri" : "urn:iso:std:iso:3166"
+  },
+  {
+    "uri" : "urn:iso:std:iso:3166:-2"
+  },
+  {
+    "uri" : "urn:iso:std:iso:4217"
+  },
+  {
+    "uri" : "urn:oid:1.2.36.1.2001.1001.101.104.16592"
+  },
+  {
+    "uri" : "urn:oid:1.2.36.1.2001.1005.17"
+  },
+  {
+    "uri" : "urn:oid:2.16.840.1.113883.2.9.6.2.7"
+  },
+  {
+    "uri" : "urn:oid:2.16.840.1.113883.3.1937.98.5.8"
+  }],
+  "expansion" : {
+    "parameter" : [{
+      "name" : "cache-id"
+    },
+    {
+      "name" : "tx-resource"
+    },
+    {
+      "name" : "_incomplete"
+    },
+    {
+      "name" : "abstract"
+    },
+    {
+      "name" : "activeOnly"
+    },
+    {
+      "name" : "check-system-version"
+    },
+    {
+      "name" : "count"
+    },
+    {
+      "name" : "default-to-latest-version"
+    },
+    {
+      "name" : "displayLanguage"
+    },
+    {
+      "name" : "excludeNested"
+    },
+    {
+      "name" : "excludeNotForUI"
+    },
+    {
+      "name" : "excludePostCoordinated"
+    },
+    {
+      "name" : "force-system-version"
+    },
+    {
+      "name" : "inactive"
+    },
+    {
+      "name" : "includeAlternateCodes"
+    },
+    {
+      "name" : "includeDefinition"
+    },
+    {
+      "name" : "includeDesignations"
+    },
+    {
+      "name" : "incomplete-ok"
+    },
+    {
+      "name" : "limitedExpansion"
+    },
+    {
+      "name" : "mode"
+    },
+    {
+      "name" : "no-cache"
+    },
+    {
+      "name" : "offset"
+    },
+    {
+      "name" : "profile"
+    },
+    {
+      "name" : "property"
+    },
+    {
+      "name" : "system-version"
+    },
+    {
+      "name" : "valueSetMode"
+    }]
+  }
+}
\ No newline at end of file
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.4.0/servers.ini b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.4.0/servers.ini
index a0cb37f84..374883622 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.4.0/servers.ini
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/1.4.0/servers.ini
@@ -1,3 +1,4 @@
 [servers]
 tx-dev.fhir.org.r3 = http://tx-dev.fhir.org/r3
+local.fhir.org.r3 = http://local.fhir.org/r3
 
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/.terminologyCapabilities.local.fhir.org.r3.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/.terminologyCapabilities.local.fhir.org.r3.cache
new file mode 100644
index 000000000..39ea92d1e
--- /dev/null
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/.terminologyCapabilities.local.fhir.org.r3.cache
@@ -0,0 +1,5510 @@
+{
+  "resourceType" : "TerminologyCapabilities",
+  "codeSystem" : [{
+    "uri" : "http://devices.fhir.org/CodeSystem/MDC-concept-status"
+  },
+  {
+    "uri" : "http://devices.fhir.org/CodeSystem/MDC-designation-use"
+  },
+  {
+    "uri" : "http://dicom.nema.org/resources/ontology/DCM"
+  },
+  {
+    "uri" : "http://fdasis.nlm.nih.gov"
+  },
+  {
+    "uri" : "http://fhir.ohdsi.org/CodeSystem/concepts"
+  },
+  {
+    "uri" : "http://healthit.gov/nhin/purposeofuse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/abstract-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/account-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-cardinality-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-condition-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-grouping-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-precheck-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-required-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-selection-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/actionlist"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/activity-definition-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/additionalmaterials"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/address-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/address-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjudication"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjudication-error"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adjudication-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/administrative-gender"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/admit-source"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-causality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-causality-assess"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-causality-method"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-causality-result"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-seriousness"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allerg-intol-substance-exp-risk"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-clinical-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-criticality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-verification-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-genderstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-species"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/appointmentstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-direction-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-operator-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-response-code-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-entity-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-action"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/basic-resource-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-network"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-subcategory"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-term"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/benefit-unit"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/binding-strength"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/bundle-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/capability-statement-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-activity-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-activity-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-team-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-team-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/chargeitem-billingcodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/chargeitem-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/choice-list-orientation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/chromosome-human"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claim-exception"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claim-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claimcareteamrole"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claiminformationcategory"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/classification-or-context"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/clinical-impression-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/codesystem-content-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/codesystem-hierarchy-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/example"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/summary"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/common-tags"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/communication-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/communication-not-done-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/compartment-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composite-measure-scoring"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composition-attestation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composition-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-map-equivalence"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-properties"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-property-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conceptmap-unmapped-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-clinical"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/condition-ver-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conditional-delete-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conditional-read-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conformance-expectation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-data-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-except-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-state-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consentaction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consentcategorycodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/constraint-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contact-point-system"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contact-point-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contactentity-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/content-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-content-derivative"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contractsubtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttermsubtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttermtypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contracttypecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contributor-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/copy-number-event"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/coverage-level"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/coverage-selfpay"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/data-absent-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/data-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/dataelement-stringency"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/days-of-week"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/definition-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/definition-topic"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/detectedissue-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-action"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-statement-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diagnosis-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diagnostic-report-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/dicom-audit-lifecycle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diet"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/digital-media-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/discharge-disposition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/discriminator-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-reference-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-location-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-special-arrangements"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/endpoint-connection-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/endpoint-payload-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/endpoint-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/entformula-additive"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/episode-of-care-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/episodeofcare-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-capability-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-timing"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/evidence-quality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-claimitemtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-claimsubtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-claimtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-diagnosisrelatedgroup"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-diagnosistype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-fdi"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-onsettype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-oralprostho"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-payee-resource-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-paymenttype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-pharmaservice"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-programcode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-providerqualification"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-relatedclaimrelationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-revenue-center"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-servicemodifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-serviceplace"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-serviceproduct"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-tooth"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-udi"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-USCLS"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-visionprescriptionproduct"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/explanationofbenefit-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extension-context"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extra-activity-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extra-security-role-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/FDI-surface"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/filter-operator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-priority-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fm-conditions"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fm-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/forms-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fundsreserve"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-acceptance-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-status-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/graph-compartment-rule"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/group-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guidance-response-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-dependency-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-page-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/history-not-done-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/history-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/hl7-work-group"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/http-operations"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/http-verb"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identifier-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identifier-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identity-assuranceLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/immunization-origin"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/immunization-recommendation-date-criterion"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/immunization-recommendation-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/implant-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/intervention"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/iso-21089-lifecycle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/issue-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/issue-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/item-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/library-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/link-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/linkage-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-empty-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-example-use-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-order"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-physical-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-context-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-group-type-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-input-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-model-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-source-list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-target-list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-transform"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/marital-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/match-grade"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-data-usage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-population"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-report-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-report-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-scoring"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measurement-principle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/media-subtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-admin-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-admin-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-dispense-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-dispense-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-package-form"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-request-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-request-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-request-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-statement-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-statement-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-statement-taken"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/medication-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-events"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-reasons-encounter"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-significance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-transport"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/messageheader-response-request"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-calibration-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-calibration-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-color"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-operational-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/missingtoothreason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/modifiers"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/name-assembly-order"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/name-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/namingsystem-identifier-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/namingsystem-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/narrative-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/network-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/note-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/nutrition-request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/object-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-relationshiptypes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-statistics"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-parameter-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operational-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/organization-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/parameter-group"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participantrequired"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participationstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/payeetype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/payment-adjustment-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/payment-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/paymentstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/plan-definition-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/policyholder-relationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/practitioner-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/practitioner-specialty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/procedure-progress-status-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/processoutcomecodes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/processpriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/property-representation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/provenance-entity-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/publication-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/quality-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/quantity-comparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/question-max-occurs"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-answers-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-display-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-item-control"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-usage-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reaction-event-certainty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reaction-event-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reason-medication-given"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reason-medication-not-given"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/recommendation-strength"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reference-handling-policy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reference-version-rules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/referencerange-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/related-artifact-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/relationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/remittance-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-action-result-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-result-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-status-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/repository-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/research-study-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/research-subject-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-aggregation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-slicing-rules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-type-link"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-validation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/response-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-capability-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-interaction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-security-service"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/risk-probability"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-comparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-entry-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-modifier-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-param-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-xpath-usage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/security-source-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sequence-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-provision-conditions"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-referral-method"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/service-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/cvx"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/ex-icd-10-procedures"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-10"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-10-cm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-9-cm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/mvx"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/ndc"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/slotstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/spdx-license"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/special-values"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/specification-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/specimen-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/structure-definition-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-channel-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-tag"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/substance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/substance-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supply-item-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supply-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplydelivery-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplyrequest-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplyrequest-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/system-version-processing-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/task-performer-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/task-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/testscript-operation-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/testscript-profile-destination-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/testscript-profile-origin-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/transaction-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/trigger-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/type-derivation-rule"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/udi-entry-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/unknown-content-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/usage-context-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0001"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0002"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0003"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0004"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0006/2.1"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0006/2.4"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0007"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0008"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0009"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0012"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0017"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0023"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0027"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0033"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0034"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0038"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0043"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0048"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0052"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0061"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0062"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0063"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0065"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0066"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0069"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0070"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0074"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0076"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0078"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0080"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0083"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0085"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0091"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0092"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0098"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0100"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0102"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0103"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0104"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0105"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0106"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0107"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0108"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0109"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0116"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0119"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0121"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0122"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0123"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0124"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0126"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0127"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0128"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0130"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0131"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0133"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0135"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0136"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0137"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0140"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0141"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0142"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0144"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0145"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0146"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0147"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0148"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0149"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0150"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0153"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0155"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0156"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0157"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0158"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0159"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0160"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0161"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0162"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0163"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0164"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0165"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0166"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0167"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0168"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0169"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0170"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0173"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0174"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0175"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0177"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0178"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0179"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0180"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0181"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0183"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0185"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0187"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0189"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0190"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0191"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0193"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0200"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0201"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0202"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0203"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0204"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0205"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0206"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0207"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0208"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0209"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0210"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0211"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0213"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0214"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0215"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0216"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0217"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0220"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0223"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0224"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0225"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0227"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0228"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0229"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0230"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0231"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0232"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0234"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0235"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0236"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0237"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0238"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0239"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0240"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0241"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0242"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0243"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0247"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0248"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0250"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0251"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0252"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0253"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0254"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0255"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0256"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0257"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0258"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0259"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0260"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0261"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0262"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0263"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0265"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0267"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0268"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0269"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0270"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0271"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0272"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0273"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0275"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0276"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0277"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0278"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0279"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0280"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0281"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0282"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0283"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0284"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0286"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0287"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0290"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0291"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0292"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0294"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0298"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0299"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0301"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0305"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0309"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0311"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0315"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0316"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0317"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0321"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0322"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0323"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0324"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0325"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0326"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0329"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0330"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0331"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0332"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0334"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0335"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0336"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0337"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0338"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0339"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0344"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0350"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0351"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0354"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0355"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0356"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0357"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0359"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0360/2.3.1"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0360/2.7"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0363"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0364"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0365"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0366"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0367"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0368"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0369"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0370"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0371"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0372"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0373"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0374"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0375"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0376"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0377"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0383"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0384"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0387"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0388"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0389"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0391/2.4"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0391/2.6"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0392"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0393"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0394"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0395"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0396"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0397"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0398"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0401"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0402"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0403"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0404"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0406"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0409"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0411"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0415"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0416"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0417"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0418"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0421"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0422"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0423"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0424"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0425"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0426"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0427"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0428"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0429"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0430"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0431"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0432"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0433"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0434"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0435"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0436"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0437"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0438"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0440"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0441"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0442"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0443"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0444"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0445"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0450"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0455"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0456"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0457"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0459"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0460"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0465"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0466"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0468"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0469"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0470"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0472"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0473"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0474"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0475"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0477"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0478"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0480"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0482"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0483"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0484"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0485"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0487"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0488"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0489"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0490"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0491"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0492"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0493"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0494"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0495"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0496"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0497"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0498"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0499"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0500"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0501"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0502"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0503"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0504"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0505"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0506"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0507"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0508"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0510"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0511"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0513"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0514"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0516"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0517"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0518"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0520"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0523"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0524"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0527"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0528"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0529"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0530"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0534"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0535"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0536"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0538"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0540"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0544"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0547"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0548"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0550"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0553"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0554"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0555"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0556"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0557"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0558"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0559"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0561"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0562"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0564"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0565"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0566"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0569"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0570"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0571"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0572"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0615"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0616"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0617"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0618"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0625"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0634"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0642"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0651"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0653"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0657"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0659"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0667"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0669"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0682"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0702"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0717"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0719"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0725"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0728"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0731"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0734"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0739"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0742"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0749"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0755"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0757"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0759"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0761"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0763"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0776"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0778"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0790"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0793"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0806"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0818"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0834"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0868"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0871"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0881"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0882"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0894"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0895"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0904"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0905"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0906"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0907"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0909"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0912"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0914"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0916"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0917"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0918"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0919"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0920"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0921"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0922"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0923"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0924"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0925"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0926"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0927"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0933"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/0935"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v2/4000"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementCondition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementDetailCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementDetailType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AcknowledgementType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActExposureLevelCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActInvoiceElementModifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActMood"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActReason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipCheckpoint"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipJoin"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipSplit"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipSubset"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActRelationshipType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActSite"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActUncertainty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ActUSPrivacyLaw"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AddressPartType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AddressUse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AdministrativeGender"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/AmericanIndianAlaskaNativeLanguages"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Calendar"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CalendarCycle"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CalendarType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Charset"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CodingRationale"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CommunicationFunctionType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/CompressionAlgorithm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Confidentiality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContainerCap"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContainerSeparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContentProcessingMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ContextControl"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DataOperation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DeviceAlertLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DocumentCompletion"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/DocumentStorage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EducationLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EmployeeJobClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EncounterAdmissionSource"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EncounterSpecialCourtesy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityDeterminer"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityHandling"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartQualifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartQualifierR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNamePartTypeR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNameUse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityNameUseR2"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityRisk"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EntityStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/EquipmentAlertLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Ethnicity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ExposureMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/GenderStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/GTSAbbreviation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/hl7Realm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/HL7UpdateMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/hl7V3Conformance"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/HtmlLinkType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IdentifierReliability"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IdentifierScope"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/IntegrityCheckAlgorithm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LanguageAbilityMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LanguageAbilityProficiency"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LivingArrangement"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LocalMarkupIgnore"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/LocalRemoteControlState"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ManagedParticipationStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MapRelationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MaritalStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/MessageWaitingPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ModifyIndicator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/NullFlavor"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationInterpretation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationMethod"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ObservationValue"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/orderableDrugForm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationFunction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationSignature"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ParticipationType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PatientImportance"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PaymentTerms"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/PersonDisabilityType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProbabilityDistributionType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProcessingID"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ProcessingMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryParameterValue"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryPriority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryRequestLimit"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryResponse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/QueryStatusCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Race"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RelationalOperator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RelationshipConjunction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ReligiousAffiliation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseModality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/ResponseMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleClass"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleLinkStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleLinkType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RoleStatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/RouteOfAdministration"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/Sequencing"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SetOperator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SpecimenType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/substanceAdminSubstitution"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/SubstitutionCondition"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellHorizontalAlign"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellScope"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableCellVerticalAlign"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableFrame"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TableRules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TargetAwareness"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TelecommunicationCapabilities"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TimingEvent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TransmissionRelationshipTypeCode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/TribalEntityUS"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/v3/VaccineManufacturer"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vaccination-protocol-dose-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vaccination-protocol-dose-status-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/variant-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/versioning-policy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vision-base-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vision-eye-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/w3c-provenance-activity-type"
+  },
+  {
+    "uri" : "http://loinc.org"
+  },
+  {
+    "uri" : "http://nucc.org/provider-taxonomy"
+  },
+  {
+    "uri" : "http://radlex.org"
+  },
+  {
+    "uri" : "http://snomed.info/sct"
+  },
+  {
+    "uri" : "http://standardterms.edqm.eu"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/action-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/activity-definition-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication-error"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/admit-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-causality-assess"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-causality-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-seriousness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-severity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allerg-intol-substance-exp-risk"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/applicability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/attribute-estimate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-entity-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-event-outcome"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-event-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/basic-resource-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-network"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-term"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-unit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/can-push-updates"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/catalogType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-rating"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-rating"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/characteristic-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/chargeitem-billingcodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/choice-list-orientation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/chromosome-human"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claim-exception"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claim-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claimcareteamrole"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claiminformationcategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/codesystem-altcode-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/common-tags"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-not-done-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-topic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/composite-measure-scoring"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/composition-altcode-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/conceptdomains"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-clinical"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-ver-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/conformance-expectation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentaction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentcategorycodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentpolicycodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentscope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentverification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contactentity-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/container-cap"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-content-derivative"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-data-meaning"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractaction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractactorrole"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractsignertypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractsubtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contracttermsubtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contracttermtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/copy-number-event"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-class"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-copay-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-selfpay"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverageeligibilityresponse-ex-auth-support"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/data-absent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-topic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-use"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/device-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/diagnosis-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/diet"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/directness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/discharge-disposition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/dose-rate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-special-arrangements"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-subject-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/endpoint-connection-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/endpoint-payload-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/entformula-additive"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/episodeofcare-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/evidence-quality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-benefitcategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-claimsubtype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-coverage-financial-exception"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosisrelatedgroup"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosistype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-payee-resource-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-paymenttype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-procedure-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-programcode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-providerqualification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-relatedclaimrelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-revenue-center"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-serviceplace"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-tooth"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-USCLS"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-visionprescriptionproduct"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/expansion-parameter-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/expansion-processing-rule"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/extra-security-role-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/failure-action"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/FDI-surface"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/financialtaskcode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/financialtaskinputtype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/flag-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/forms-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/fundsreserve"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-acceptance-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-achievement"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-priority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-relationship-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/guide-parameter-code"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/handling-condition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/history-absent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/hl7-work-group"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/hl7TermMaintInfra"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/icd-o-3"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-funding-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-origin"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-program-eligibility"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-recommendation-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-subpotent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/implantStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/insurance-plan-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/library-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-empty-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-example-use-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-order"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/location-physical-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/match-grade"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-data-usage"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-improvement-notation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-population"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-scoring"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/med-admin-perform-function"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/media-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-usage-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationdispense-performer-function"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-characteristic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-package-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-course-of-therapy"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/message-reasons-encounter"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/missingtoothreason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/modifiers"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/name-assembly-order"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/need"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/nutrition-intake-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/object-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/observation-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/observation-statistics"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/operation-outcome"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/organization-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/parameter-group"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/participant-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payeetype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payment-adjustment-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payment-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/paymentstatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/plan-definition-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/practitioner-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/primary-source-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/processpriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/program"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/push-type-available"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/question-max-occurs"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/questionnaire-usage-mode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/reaction-event-certainty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/reason-medication-given"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/recommendation-strength"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/referencerange-meaning"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/rejection-criteria"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-objective-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-phase"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-prim-purp-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-reason-stopped"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-milestone"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-state-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/resource-security-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/resource-type-link"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/risk-probability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/security-source-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/service-provision-conditions"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/service-referral-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/smart-capabilities"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/special-values"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/standards-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/state-change-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/statistic-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/study-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscriber-relationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-channel-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-error"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-status-at-event"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-tag"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/substance-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supply-item-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supply-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supplyrequest-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/synthesis-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-operation-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-profile-destination-types"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-profile-origin-types"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/triggerEventID"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/usage-context-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/utg-concept-properties"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0001"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0002"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0003"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0004"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0005"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0006"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0007"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0008"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0009"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0012"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0017"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0027"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0033"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0034"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0038"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0048"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0052"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0061"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0062"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0063"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0065"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0066"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0069"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0070"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0074"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0076"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0080"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0083"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0085"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0091"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0092"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0098"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0100"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0102"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0103"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0104"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0105"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0106"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0107"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0108"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0109"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0116"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0119"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0121"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0122"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0123"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0124"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0126"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0127"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0128"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0130"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0131"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0133"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0135"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0137"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0140"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0142"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0144"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0145"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0146"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0147"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0148"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0149"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0150"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0155"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0156"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0157"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0158"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0159"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0160"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0161"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0162"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0163"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0164"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0165"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0166"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0167"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0168"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0169"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0170"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0173"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0174"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0175"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0177"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0178"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0179"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0180"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0181"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0183"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0185"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0187"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0189"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0190"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0191"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0193"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0200"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0201"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0202"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0203"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0204"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0205"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0206"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0207"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0208"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0209"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0210"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0211"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0213"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0214"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0215"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0216"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0217"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0220"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0223"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0224"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0225"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0227"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0228"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0230"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0231"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0232"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0234"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0235"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0236"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0237"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0238"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0239"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0240"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0241"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0242"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0243"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0247"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0248"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0250"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0251"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0252"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0253"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0254"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0255"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0256"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0257"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0258"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0260"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0261"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0262"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0263"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0265"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0267"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0268"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0269"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0270"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0271"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0272"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0273"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0275"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0276"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0277"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0278"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0279"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0280"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0281"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0282"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0283"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0284"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0286"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0287"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0290"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0291"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0294"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0298"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0299"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0301"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0305"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0309"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0311"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0315"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0316"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0317"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0321"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0322"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0323"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0324"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0325"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0326"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0329"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0330"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0331"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0332"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0334"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0335"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0336"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0337"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0339"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0344"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0353"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0354"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0355"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0356"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0357"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0359"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0360"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0364"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0365"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0366"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0367"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0368"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0369"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0370"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0371"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0372"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0373"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0374"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0375"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0376"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0377"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0383"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0384"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0387"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0388"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0389"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0391"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0392"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0393"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0394"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0395"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0396"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0397"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0398"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0401"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0402"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0403"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0404"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0406"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0409"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0415"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0416"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0417"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0418"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0421"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0422"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0423"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0424"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0425"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0426"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0427"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0428"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0429"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0430"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0431"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0432"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0433"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0434"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0435"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0436"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0437"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0438"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0440"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0441"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0442"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0443"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0444"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0445"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0450"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0457"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0465"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0466"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0468"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0469"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0470"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0472"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0473"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0474"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0475"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0477"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0478"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0480"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0482"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0483"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0484"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0485"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0487"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0488"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0489"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0490"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0491"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0492"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0493"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0494"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0495"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0496"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0497"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0498"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0499"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0500"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0501"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0502"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0503"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0504"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0505"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0506"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0507"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0508"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0510"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0511"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0513"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0514"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0516"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0517"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0518"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0520"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0523"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0524"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0527"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0528"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0529"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0530"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0532"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0534"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0535"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0536"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0538"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0540"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0544"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0547"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0548"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0550"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0553"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0554"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0555"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0556"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0557"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0558"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0559"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0560"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0561"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0562"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0564"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0565"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0566"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0569"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0570"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0571"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0572"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0615"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0616"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0617"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0618"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0625"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0634"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0642"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0651"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0653"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0657"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0659"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0667"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0669"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0682"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0702"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0717"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0728"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0731"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0734"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0739"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0742"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0749"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0755"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0757"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0759"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0761"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0763"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0776"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0778"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0790"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0793"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0806"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0818"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0834"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0868"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0871"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0881"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0882"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0894"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0904"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0905"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0906"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0907"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0909"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0912"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0914"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0916"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0917"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0918"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0919"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0920"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0921"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0922"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0923"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0924"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0925"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0926"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0927"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0933"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0935"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0936"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0937"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0938"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0939"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0940"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0942"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0945"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0946"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0948"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0949"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0950"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0951"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0970"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0971"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-4000"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-tables"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActExposureLevelCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActInvoiceElementModifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActMood"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActReason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipCheckpoint"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipJoin"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSplit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSubset"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActSite"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActUncertainty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActUSPrivacyLaw"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AddressPartType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AdministrativeGender"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AmericanIndianAlaskaNativeLanguages"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Calendar"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CalendarCycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CalendarType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Charset"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodeSystem"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodeSystemType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodingRationale"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CommunicationFunctionType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CompressionAlgorithm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptCodeRelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptGenerality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptProperty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Confidentiality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContainerCap"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContainerSeparator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContentProcessingMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContextControl"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Country"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Currency"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DataOperation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DataType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Dentition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DeviceAlertLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DocumentCompletion"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DocumentStorage"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EditStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EducationLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EmployeeJobClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAccident"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAcuity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAdmissionSource"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterReferralSource"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterSpecialCourtesy"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityDeterminer"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityHandling"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifierR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartTypeR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNameUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNameUseR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityRisk"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EquipmentAlertLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Ethnicity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ExposureMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-GenderStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HealthcareProviderTaxonomyHIPAA"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ApprovalStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7CMETAttribution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7CommitteeIDInRIM"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7ConformanceInclusion"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7ContextConductionStyle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7DefinedRoseProperty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7DocumentFormatCodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ITSType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ITSVersionCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingDomain"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSection"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSubSection"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7Realm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7StandardVersionCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7UpdateMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7V3Conformance"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7VoteResolution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HtmlLinkType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IdentifierReliability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IdentifierScope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IntegrityCheckAlgorithm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-1retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-2retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-3retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-iso4217-HL7"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityProficiency"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LivingArrangement"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LocalMarkupIgnore"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LocalRemoteControlState"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ManagedParticipationStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MapRelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaterialForm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaterialType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MDFAttributeType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfHmdMetSourceType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfHmdRowType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfRmimRowType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MDFSubjectAreaPrefix"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-mediaType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MessageCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MessageWaitingPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ModifyIndicator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationCategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationMethod"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationValue"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-OrganizationNameType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParameterizedDataType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationFunction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationSignature"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PatientImportance"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PaymentTerms"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PersonDisabilityType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PostalAddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProbabilityDistributionType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProcessingID"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProcessingMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryParameterValue"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryQuantityUnit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryRequestLimit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryResponse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryStatusCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Race"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RelationalOperator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RelationshipConjunction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ReligiousAffiliation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseModality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleLinkStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleLinkType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Sequencing"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SetOperator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SpecimenType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-styleType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SubstitutionCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellHorizontalAlign"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellScope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellVerticalAlign"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableFrame"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableRules"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TargetAwareness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationAddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationCapabilities"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TimingEvent"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TransmissionRelationshipTypeCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TribalEntityUS"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-URLScheme"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VaccineManufacturer"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VaccineType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VocabularyDomainQualifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-WorkClassificationODH"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-process"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/variable-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/variant-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/verificationresult-communication-method"
+  },
+  {
+    "uri" : "http://unitsofmeasure.org"
+  },
+  {
+    "uri" : "http://unstats.un.org/unsd/methods/m49/m49.htm"
+  },
+  {
+    "uri" : "http://varnomen.hgvs.org"
+  },
+  {
+    "uri" : "http://www.ada.org/snodent"
+  },
+  {
+    "uri" : "http://www.ama-assn.org/go/cpt"
+  },
+  {
+    "uri" : "http://www.hl7.org/fhir/contractaction"
+  },
+  {
+    "uri" : "http://www.hl7.org/fhir/contractactorrole"
+  },
+  {
+    "uri" : "http://www.hl7.org/fhir/contractsignertypecodes"
+  },
+  {
+    "uri" : "http://www.nlm.nih.gov/research/umls/rxnorm"
+  },
+  {
+    "uri" : "http://www.whocc.no/atc"
+  },
+  {
+    "uri" : "https://www.cms.gov/Medicare/Medicare-Fee-for-Service-Payment/HospitalAcqCond/Coding"
+  },
+  {
+    "uri" : "https://www.humanservices.gov.au/organisations/health-professionals/enablers/air-vaccine-code-formats"
+  },
+  {
+    "uri" : "https://www.iana.org/time-zones"
+  },
+  {
+    "uri" : "https://www.usps.com/"
+  },
+  {
+    "uri" : "urn:ietf:bcp:13"
+  },
+  {
+    "uri" : "urn:ietf:bcp:47"
+  },
+  {
+    "uri" : "urn:ietf:rfc:3986"
+  },
+  {
+    "uri" : "urn:iso-astm:E1762-95:2013"
+  },
+  {
+    "uri" : "urn:iso:std:iso:11073:10101"
+  },
+  {
+    "uri" : "urn:iso:std:iso:3166"
+  },
+  {
+    "uri" : "urn:iso:std:iso:3166:-2"
+  },
+  {
+    "uri" : "urn:iso:std:iso:4217"
+  },
+  {
+    "uri" : "urn:oid:1.2.36.1.2001.1001.101.104.16592"
+  },
+  {
+    "uri" : "urn:oid:1.2.36.1.2001.1005.17"
+  },
+  {
+    "uri" : "urn:oid:2.16.840.1.113883.2.9.6.2.7"
+  },
+  {
+    "uri" : "urn:oid:2.16.840.1.113883.3.1937.98.5.8"
+  }],
+  "expansion" : {
+    "parameter" : [{
+      "name" : "cache-id"
+    },
+    {
+      "name" : "tx-resource"
+    },
+    {
+      "name" : "_incomplete"
+    },
+    {
+      "name" : "abstract"
+    },
+    {
+      "name" : "activeOnly"
+    },
+    {
+      "name" : "check-system-version"
+    },
+    {
+      "name" : "count"
+    },
+    {
+      "name" : "default-to-latest-version"
+    },
+    {
+      "name" : "displayLanguage"
+    },
+    {
+      "name" : "excludeNested"
+    },
+    {
+      "name" : "excludeNotForUI"
+    },
+    {
+      "name" : "excludePostCoordinated"
+    },
+    {
+      "name" : "force-system-version"
+    },
+    {
+      "name" : "inactive"
+    },
+    {
+      "name" : "includeAlternateCodes"
+    },
+    {
+      "name" : "includeDefinition"
+    },
+    {
+      "name" : "includeDesignations"
+    },
+    {
+      "name" : "incomplete-ok"
+    },
+    {
+      "name" : "limitedExpansion"
+    },
+    {
+      "name" : "mode"
+    },
+    {
+      "name" : "no-cache"
+    },
+    {
+      "name" : "offset"
+    },
+    {
+      "name" : "profile"
+    },
+    {
+      "name" : "property"
+    },
+    {
+      "name" : "system-version"
+    },
+    {
+      "name" : "valueSetMode"
+    }]
+  }
+}
\ No newline at end of file
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/servers.ini b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/servers.ini
index a0cb37f84..374883622 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/servers.ini
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/servers.ini
@@ -1,3 +1,4 @@
 [servers]
 tx-dev.fhir.org.r3 = http://tx-dev.fhir.org/r3
+local.fhir.org.r3 = http://local.fhir.org/r3
 
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/.terminologyCapabilities.local.fhir.org.r4.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/.terminologyCapabilities.local.fhir.org.r4.cache
new file mode 100644
index 000000000..cbc071b89
--- /dev/null
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/.terminologyCapabilities.local.fhir.org.r4.cache
@@ -0,0 +1,3751 @@
+{
+  "resourceType" : "TerminologyCapabilities",
+  "id" : "FhirServer",
+  "url" : "http://localhost/r4/metadata",
+  "version" : "2.0.0",
+  "name" : "FHIR Reference Server Teminology Capability Statement",
+  "status" : "active",
+  "date" : "2024-09-24T13:40:06.450Z",
+  "contact" : [{
+    "telecom" : [{
+      "system" : "other",
+      "value" : "http://healthintersections.com.au/"
+    }]
+  }],
+  "description" : "Standard Teminology Capability Statement for the open source Reference FHIR Server provided by Health Intersections",
+  "codeSystem" : [{
+    "uri" : "http://cap.org/eCP"
+  },
+  {
+    "uri" : "http://cds-hooks.hl7.org/CodeSystem/indicator"
+  },
+  {
+    "uri" : "http://devices.fhir.org/CodeSystem/MDC-concept-status"
+  },
+  {
+    "uri" : "http://devices.fhir.org/CodeSystem/MDC-designation-use"
+  },
+  {
+    "uri" : "http://dicom.nema.org/resources/ontology/DCM"
+  },
+  {
+    "uri" : "http://fdasis.nlm.nih.gov"
+  },
+  {
+    "uri" : "http://fhir.ohdsi.org/CodeSystem/concepts"
+  },
+  {
+    "uri" : "http://healthit.gov/nhin/purposeofuse"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/abstract-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/account-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-cardinality-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-condition-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-grouping-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-precheck-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-required-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/action-selection-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/additionalmaterials"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/address-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/address-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/administrative-gender"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/adverse-event-actuality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-criticality"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/allergy-intolerance-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-genderstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/animal-species"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/appointmentstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-direction-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-operator-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/assert-response-code-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/asset-availability"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-action"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/audit-event-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/binding-strength"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/bundle-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/capability-statement-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-plan-activity-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/care-team-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/chargeitem-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/claim-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/code-search-support"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/codesystem-content-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/codesystem-hierarchy-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/example"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/medication-statement-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/medication-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/medicationrequest-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/medicationrequest-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/summary"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/CodeSystem/task-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/compartment-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composition-attestation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/composition-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-map-equivalence"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-properties"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-property-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/concept-subsumption-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conceptmap-unmapped-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conditional-delete-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/conditional-read-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-data-meaning"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-provision-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consent-state-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/consentperformer"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/constraint-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contact-point-system"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contact-point-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-action-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-asset-context"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-asset-scope"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-asset-subtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-asset-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-decision-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-definition-subtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-definition-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-expiration-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-legalstate"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-party-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-publicationstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-scope"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-security-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-security-classification"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-security-control"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contract-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/contributor-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/data-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/days-of-week"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/definition-resource-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/detectedissue-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-action"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-definition-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-nametype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-statement-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/device-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/diagnostic-report-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/discriminator-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-reference-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/document-relationship-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/eligibilityrequest-purpose"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/eligibilityresponse-purpose"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-location-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/encounter-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/endpoint-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/episode-of-care-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-capability-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-resource-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/event-timing"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-claimitemtype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-fdi"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-onsettype"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-oralprostho"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-pharmaservice"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-servicemodifier"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-serviceproduct"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/ex-udi"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/examplescenario-actor-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/explanationofbenefit-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/exposure-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/expression-language"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extension-context-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/extra-activity-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/feeding-device"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/FHIR-version"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/filter-operator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-priority-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/flag-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fm-conditions"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/fm-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/gender-identity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/goal-status-reason"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/graph-compartment-rule"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/graph-compartment-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/group-measure"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/group-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guidance-response-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-page-generation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/guide-parameter-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/history-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/http-operations"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/http-verb"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identifier-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/identity-assuranceLevel"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/imagingstudy-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/intervention"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/invoice-priceComponentType"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/invoice-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/issue-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/issue-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/item-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/knowledge-resource-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/language-preference-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/link-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/linkage-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/list-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/location-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-context-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-group-type-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-input-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-model-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-source-list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-target-list-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/map-transform"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-report-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/measure-report-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-events"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/message-significance-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/messageheader-response-request"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-calibration-state"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-calibration-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-color"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/metric-operational-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/name-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/namingsystem-identifier-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/namingsystem-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/narrative-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/network-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/note-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-range-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/observation-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/operation-parameter-use"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/organization-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/orientation-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participantrequired"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/participationstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/permitted-data-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/practitioner-specialty"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/procedure-progress-status-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/product-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/product-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/product-storage-scale"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/property-representation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/provenance-entity-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/provenance-participant-role"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/publication-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/quality-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/quantity-comparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-answers-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-display-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-enable-behavior"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-enable-operator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/questionnaire-item-control"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reaction-event-severity"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reason-medication-not-given"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reference-handling-policy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/reference-version-rules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/related-artifact-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/relation-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/relationship"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/remittance-outcome"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-action-result-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-result-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/report-status-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/repository-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-priority"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-resource-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/request-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/research-element-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/research-study-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/research-subject-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-aggregation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-slicing-rules"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-types"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/resource-validation-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/response-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-capability-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/restful-interaction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-comparator"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-entry-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-modifier-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-param-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/search-xpath-usage"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/secondary-finding"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sequence-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/cvx"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/ex-icd-10-procedures"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-10"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-10-cm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/icd-9-cm"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/mvx"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sid/ndc"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/slotstatus"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/sort-direction"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/spdx-license"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/specimen-contained-preference"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/specimen-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/strand-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/structure-definition-kind"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-channel-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/subscription-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/substance-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplydelivery-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/supplyrequest-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/task-intent"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/task-status"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/transaction-mode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/trigger-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/type-derivation-rule"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/udi-entry-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/unknown-content-code"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/us/core/CodeSystem/careplan-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/us/core/CodeSystem/condition-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-documentreference-category"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-provenance-participant-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/us/core/CodeSystem/uscore-treatment-intervention-preference"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uv/sdc/CodeSystem/assemble-expectation"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uv/sdc/CodeSystem/chf-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uv/sdc/CodeSystem/collapsible"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uv/sdc/CodeSystem/CSPHQ9"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uv/sdc/CodeSystem/entryMode"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uv/sdc/CodeSystem/launchContext"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uv/sdc/CodeSystem/questionnaire-answer-constraint"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/uv/sdc/CodeSystem/temp"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/variable-type"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/versioning-policy"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vision-base-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/vision-eye-codes"
+  },
+  {
+    "uri" : "http://hl7.org/fhir/w3c-provenance-activity-type"
+  },
+  {
+    "uri" : "http://ihe.net/fhir/ihe.formatcode.fhir/CodeSystem/formatcode"
+  },
+  {
+    "uri" : "http://loinc.org"
+  },
+  {
+    "uri" : "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl"
+  },
+  {
+    "uri" : "http://nucc.org/provider-taxonomy"
+  },
+  {
+    "uri" : "http://radlex.org"
+  },
+  {
+    "uri" : "http://snomed.info/sct"
+  },
+  {
+    "uri" : "http://standardterms.edqm.eu"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/action-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/activity-definition-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication-error"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adjudication-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/admit-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-causality-assess"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-causality-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-outcome"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-seriousness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/adverse-event-severity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allerg-intol-substance-exp-risk"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/applicability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/appointment-cancellation-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/appropriateness-score"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/artifact-identifier-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/artifact-version-policy-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/attribute-estimate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-entity-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-event-outcome"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/audit-event-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/basic-resource-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-network"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-term"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/benefit-unit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/can-push-updates"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/catalogType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/cdshooks-indicator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-rating"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-rating"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/characteristic-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/chargeitem-billingcodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/choice-list-orientation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/chromosome-human"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claim-exception"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claim-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claimcareteamrole"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/claiminformationcategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/codesystem-altcode-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/common-tags"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-not-done-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/communication-topic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/composite-measure-scoring"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/composition-altcode-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/conceptdomains"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-clinical"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/condition-ver-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/conformance-expectation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentaction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentcategorycodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentpolicycodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentscope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/consentverification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contactentity-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/container-cap"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-content-derivative"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-data-meaning"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contract-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractaction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractactorrole"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractsignertypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contractsubtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contracttermsubtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/contracttermtypecodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/copy-number-event"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-class"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-copay-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverage-selfpay"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/coverageeligibilityresponse-ex-auth-support"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/cql-access-modifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/data-absent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-topic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/definition-use"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/device-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/diagnosis-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/diet"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/directness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/discharge-disposition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/dose-rate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/effect-estimate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-special-arrangements"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-subject-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/encounter-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/endpoint-connection-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/endpoint-payload-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/entformula-additive"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/episodeofcare-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/evidence-quality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/evidence-variant-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-benefitcategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-claimsubtype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-coverage-financial-exception"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosisrelatedgroup"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-diagnosistype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-payee-resource-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-paymenttype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-procedure-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-programcode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-providerqualification"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-relatedclaimrelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-revenue-center"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-serviceplace"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-tooth"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-USCLS"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/ex-visionprescriptionproduct"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/expansion-parameter-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/expansion-processing-rule"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/extra-security-role-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/failure-action"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/FDI-surface"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/financialtaskcode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/financialtaskinputtype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/flag-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/forms-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/fundsreserve"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-acceptance-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-achievement"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-priority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/goal-relationship-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/guide-parameter-code"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/handling-condition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/history-absent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/hl7-document-format-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/hl7-work-group"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/hl7TermMaintInfra"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/icd-o-3"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-funding-source"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-origin"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-program-eligibility"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-recommendation-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/immunization-subpotent-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/implantStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/insurance-plan-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/library-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-empty-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-example-use-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/list-order"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/location-physical-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/match-grade"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-aggregate-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-data-usage"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-improvement-notation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-population"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-scoring"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-supplemental-data"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/measure-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/med-admin-perform-function"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/media-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/media-modality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/media-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-admin-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-admin-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-statement-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medication-usage-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationdispense-performer-function"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationdispense-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-characteristic"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-package-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationknowledge-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-admin-location"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-course-of-therapy"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/medicationrequest-status-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/message-reasons-encounter"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/message-transport"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/missingtoothreason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/modifiers"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/name-assembly-order"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/need"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/nutrition-intake-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/object-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/observation-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/observation-statistics"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/operation-outcome"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/organization-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/parameter-group"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/participant-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payeetype"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payment-adjustment-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/payment-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/paymentstatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/plan-definition-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/practitioner-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/precision-estimate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/primary-source-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/processpriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/program"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/push-type-available"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/question-max-occurs"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/questionnaire-usage-mode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/reaction-event-certainty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/reason-medication-given"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/recommendation-strength"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/referencerange-meaning"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/rejection-criteria"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-objective-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-phase"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-prim-purp-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-study-reason-stopped"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-milestone"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/research-subject-state-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/resource-security-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/resource-type-link"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/restful-security-service"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/risk-estimate-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/risk-probability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/security-source-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/service-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/service-provision-conditions"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/service-referral-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/service-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/sex-parameter-for-clinical-use"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/smart-capabilities"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/software-system-type-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/special-values"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/standards-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/state-change-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/statistic-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/study-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscriber-relationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-channel-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-error"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-status-at-event"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/subscription-tag"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/substance-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supply-item-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supply-kind"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/supplyrequest-reason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/synthesis-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-operation-codes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-profile-destination-types"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/testscript-profile-origin-types"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/triggerEventID"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/usage-context-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/utg-concept-properties"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0001"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0002"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0003"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0004"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0005"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0006"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0006|2.1"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0006|2.4"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0007"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0008"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0009"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0012"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0017"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0023"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0027"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0033"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0034"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0038"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0043"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0048"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0052"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0061"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0062"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0063"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0065"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0066"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0069"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0070"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0074"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0076"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0078"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0080"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0083"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0085"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0091"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0092"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0098"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0100"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0102"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0103"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0104"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0105"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0106"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0107"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0108"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0109"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0116"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0119"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0121"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0122"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0123"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0124"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0126"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0127"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0128"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0130"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0131"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0133"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0135"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0136"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0137"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0140"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0141"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0142"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0144"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0145"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0146"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0147"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0148"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0149"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0150"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0153"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0155"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0156"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0157"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0158"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0159"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0160"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0161"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0162"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0163"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0164"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0165"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0166"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0167"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0168"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0169"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0170"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0173"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0174"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0175"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0177"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0178"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0179"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0180"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0181"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0183"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0185"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0187"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0189"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0190"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0191"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0193"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0200"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0201"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0202"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0203"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0204"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0205"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0206"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0207"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0208"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0209"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0210"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0211"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0213"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0214"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0215"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0216"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0217"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0220"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0223"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0224"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0225"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0227"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0228"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0229"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0230"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0231"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0232"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0234"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0235"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0236"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0237"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0238"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0239"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0240"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0241"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0242"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0243"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0247"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0248"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0250"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0251"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0252"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0253"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0254"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0255"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0256"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0257"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0258"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0259"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0260"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0261"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0262"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0263"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0265"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0267"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0268"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0269"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0270"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0271"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0272"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0273"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0275"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0276"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0277"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0278"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0279"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0280"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0281"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0282"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0283"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0284"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0286"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0287"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0290"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0291"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0292"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0294"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0298"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0299"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0301"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0305"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0309"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0311"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0315"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0316"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0317"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0321"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0322"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0323"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0324"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0325"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0326"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0329"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0330"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0331"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0332"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0334"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0335"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0336"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0337"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0338"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0339"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0344"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0350"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0351"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0353"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0354"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0355"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0356"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0357"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0359"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0360"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0360|2.3.1"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0360|2.7"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0363"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0364"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0365"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0366"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0367"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0368"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0369"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0370"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0371"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0372"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0373"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0374"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0375"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0376"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0377"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0383"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0384"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0387"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0388"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0389"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0391"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0391|2.4"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0391|2.6"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0392"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0393"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0394"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0395"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0396"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0397"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0398"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0401"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0402"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0403"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0404"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0406"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0409"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0411"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0415"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0416"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0417"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0418"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0421"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0422"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0423"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0424"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0425"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0426"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0427"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0428"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0429"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0430"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0431"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0432"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0433"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0434"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0435"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0436"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0437"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0438"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0440"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0441"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0442"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0443"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0444"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0445"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0450"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0455"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0456"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0457"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0459"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0460"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0465"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0466"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0468"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0469"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0470"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0472"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0473"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0474"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0475"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0477"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0478"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0480"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0482"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0483"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0484"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0485"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0487"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0488"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0489"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0490"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0491"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0492"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0493"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0494"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0495"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0496"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0497"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0498"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0499"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0500"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0501"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0502"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0503"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0504"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0505"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0506"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0507"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0508"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0510"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0511"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0513"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0514"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0516"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0517"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0518"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0520"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0523"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0524"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0527"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0528"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0529"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0530"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0532"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0534"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0535"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0536"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0538"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0540"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0544"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0547"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0548"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0550"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0553"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0554"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0555"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0556"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0557"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0558"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0559"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0560"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0561"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0562"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0564"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0565"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0566"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0569"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0570"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0571"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0572"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0615"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0616"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0617"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0618"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0625"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0634"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0642"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0651"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0653"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0657"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0659"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0667"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0669"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0682"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0702"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0717"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0719"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0725"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0728"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0731"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0734"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0739"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0742"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0749"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0755"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0757"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0759"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0761"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0763"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0776"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0778"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0790"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0793"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0806"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0818"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0834"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0868"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0871"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0881"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0882"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0894"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0895"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0904"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0905"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0906"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0907"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0909"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0912"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0914"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0916"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0917"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0918"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0919"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0920"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0921"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0922"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0923"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0924"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0925"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0926"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0927"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0933"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0935"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0936"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0937"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0938"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0939"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0940"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0942"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0945"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0946"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0948"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0949"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0950"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0951"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0970"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-0971"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-4000"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v2-tables"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActExposureLevelCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActInvoiceElementModifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActMood"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActReason"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipCheckpoint"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipJoin"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSplit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSubset"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActSite"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActUncertainty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ActUSPrivacyLaw"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AddressPartType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AdministrativeGender"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-AmericanIndianAlaskaNativeLanguages"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Calendar"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CalendarCycle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CalendarType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Charset"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodeSystem"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodeSystemType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CodingRationale"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CommunicationFunctionType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-CompressionAlgorithm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptCodeRelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptGenerality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptProperty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ConceptStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Confidentiality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContainerCap"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContainerSeparator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContentProcessingMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ContextControl"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Country"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Currency"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DataOperation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DataType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Dentition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DeviceAlertLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DocumentCompletion"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-DocumentStorage"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EditStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EducationLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EmployeeJobClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAccident"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAcuity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterAdmissionSource"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterReferralSource"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EncounterSpecialCourtesy"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityDeterminer"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityHandling"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifierR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartTypeR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNameUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityNameUseR2"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityRisk"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EntityStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-EquipmentAlertLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Ethnicity"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ExposureMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-GenderStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HealthcareProviderTaxonomyHIPAA"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ApprovalStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7CMETAttribution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7CommitteeIDInRIM"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7ConformanceInclusion"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7ContextConductionStyle"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7DefinedRoseProperty"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7DocumentFormatCodes"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ITSType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7ITSVersionCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingDomain"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSection"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSubSection"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7Realm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7StandardVersionCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HL7UpdateMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7V3Conformance"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-hl7VoteResolution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-HtmlLinkType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IdentifierReliability"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IdentifierScope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-IntegrityCheckAlgorithm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-1retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-2retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ISO3166-3retired"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-iso4217-HL7"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityProficiency"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LivingArrangement"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LocalMarkupIgnore"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-LocalRemoteControlState"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ManagedParticipationStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ManufacturerModelNameExample"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MapRelationship"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaterialForm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MaterialType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MDFAttributeType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfHmdMetSourceType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfHmdRowType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MdfRmimRowType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MDFSubjectAreaPrefix"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-mediaType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MessageCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-MessageWaitingPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ModifyIndicator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationCategory"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationMethod"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ObservationValue"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-OrganizationNameType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParameterizedDataType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationFunction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationSignature"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PatientImportance"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PaymentTerms"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PersonDisabilityType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-policyHolderRole"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-PostalAddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProbabilityDistributionType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProcessingID"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ProcessingMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryParameterValue"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryPriority"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryQuantityUnit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryRequestLimit"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryResponse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-QueryStatusCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Race"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RelationalOperator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RelationshipConjunction"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ReligiousAffiliation"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseLevel"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseModality"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-ResponseMode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleClass"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleLinkStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleLinkType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RoleStatus"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-Sequencing"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SetOperator"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SoftwareNameExample"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SpecimenType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-styleType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-SubstitutionCondition"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellHorizontalAlign"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellScope"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableCellVerticalAlign"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableFrame"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TableRules"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TargetAwareness"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationAddressUse"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationCapabilities"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TimingEvent"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TransmissionRelationshipTypeCode"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-TribalEntityUS"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-triggerEventID"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-URLScheme"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VaccineManufacturer"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VaccineType"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-VocabularyDomainQualifier"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/v3-WorkClassificationODH"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-process"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-status"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/validation-type"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/variable-role"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/variant-state"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/CodeSystem/verificationresult-communication-method"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/fhir/CodeSystem/medicationdispense-category"
+  },
+  {
+    "uri" : "http://terminology.hl7.org/fhir/CodeSystem/medicationdispense-status-reason"
+  },
+  {
+    "uri" : "http://unitsofmeasure.org"
+  },
+  {
+    "uri" : "http://unstats.un.org/unsd/methods/m49/m49.htm"
+  },
+  {
+    "uri" : "http://varnomen.hgvs.org"
+  },
+  {
+    "uri" : "http://www.ada.org/snodent"
+  },
+  {
+    "uri" : "http://www.ama-assn.org/go/cpt"
+  },
+  {
+    "uri" : "http://www.cms.gov/Medicare/Coding/ICD10"
+  },
+  {
+    "uri" : "http://www.nlm.nih.gov/research/umls/rxnorm"
+  },
+  {
+    "uri" : "http://www.whocc.no/atc"
+  },
+  {
+    "uri" : "https://nahdo.org/sopt"
+  },
+  {
+    "uri" : "https://www.cdc.gov/nhsn/cdaportal/terminology/codesystem/cdcnhsn.html"
+  },
+  {
+    "uri" : "https://www.cdc.gov/nhsn/cdaportal/terminology/codesystem/hsloc.html"
+  },
+  {
+    "uri" : "https://www.cms.gov/Medicare/Medicare-Fee-for-Service-Payment/HospitalAcqCond/Coding"
+  },
+  {
+    "uri" : "https://www.humanservices.gov.au/organisations/health-professionals/enablers/air-vaccine-code-formats"
+  },
+  {
+    "uri" : "https://www.iana.org/time-zones"
+  },
+  {
+    "uri" : "https://www.usps.com/"
+  },
+  {
+    "uri" : "urn:ietf:bcp:13"
+  },
+  {
+    "uri" : "urn:ietf:bcp:47"
+  },
+  {
+    "uri" : "urn:ietf:rfc:3986"
+  },
+  {
+    "uri" : "urn:iso-astm:E1762-95:2013"
+  },
+  {
+    "uri" : "urn:iso:std:iso:11073:10101"
+  },
+  {
+    "uri" : "urn:iso:std:iso:3166"
+  },
+  {
+    "uri" : "urn:iso:std:iso:3166:-2"
+  },
+  {
+    "uri" : "urn:iso:std:iso:4217"
+  },
+  {
+    "uri" : "urn:oid:1.2.36.1.2001.1001.101.104.16592"
+  },
+  {
+    "uri" : "urn:oid:1.2.36.1.2001.1005.17"
+  },
+  {
+    "uri" : "urn:oid:2.16.840.1.113883.2.9.6.2.7"
+  },
+  {
+    "uri" : "urn:oid:2.16.840.1.113883.3.1937.98.5.8"
+  },
+  {
+    "uri" : "urn:oid:2.16.840.1.113883.6.238"
+  }],
+  "expansion" : {
+    "parameter" : [{
+      "name" : "cache-id",
+      "documentation" : "This server supports caching terminology resources between calls. Clients only need to send value sets and codesystems once; there after they are automatically in scope for calls with the same cache-id. The cache is retained for 30 min from last call"
+    },
+    {
+      "name" : "tx-resource",
+      "documentation" : "Additional valuesets needed for evaluation e.g. value sets referred to from the import statement of the value set being expanded"
+    },
+    {
+      "name" : "_incomplete"
+    },
+    {
+      "name" : "abstract"
+    },
+    {
+      "name" : "activeOnly"
+    },
+    {
+      "name" : "check-system-version"
+    },
+    {
+      "name" : "count"
+    },
+    {
+      "name" : "default-to-latest-version"
+    },
+    {
+      "name" : "displayLanguage"
+    },
+    {
+      "name" : "excludeNested"
+    },
+    {
+      "name" : "excludeNotForUI"
+    },
+    {
+      "name" : "excludePostCoordinated"
+    },
+    {
+      "name" : "force-system-version"
+    },
+    {
+      "name" : "inactive"
+    },
+    {
+      "name" : "includeAlternateCodes"
+    },
+    {
+      "name" : "includeDefinition"
+    },
+    {
+      "name" : "includeDesignations"
+    },
+    {
+      "name" : "incomplete-ok"
+    },
+    {
+      "name" : "limitedExpansion"
+    },
+    {
+      "name" : "mode",
+      "documentation" : "=lenient-display-validation"
+    },
+    {
+      "name" : "no-cache"
+    },
+    {
+      "name" : "offset"
+    },
+    {
+      "name" : "profile"
+    },
+    {
+      "name" : "property"
+    },
+    {
+      "name" : "system-version"
+    },
+    {
+      "name" : "valueSetMode",
+      "documentation" : "= CHECK_MEMBERSHIP_ONLY | NO_MEMBERSHIP_CHECK"
+    }]
+  }
+}
\ No newline at end of file
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/http___www.ada.org_snodent.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/http___www.ada.org_snodent.cache
index 895218310..b7cc0f114 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/http___www.ada.org_snodent.cache
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/http___www.ada.org_snodent.cache
@@ -39,10 +39,68 @@ v: {
   "system" : "http://www.ada.org/snodent",
   "version" : "2.1.0",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
 
 }
 -------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://www.ada.org/snodent",
+    "code" : "210965D",
+    "display" : "Anterior part of lower alveolar ridge"
+  }],
+  "text" : "Anterior part of lower alveolar ridge"
+}, "url": "http://hl7.org/fhir/us/dental-data-exchange/ValueSet/dental-anatomy", "version": "1.0.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "version" : "2.1.0",
+  "severity" : "error",
+  "error" : "No valid coding was found for the value set 'http://hl7.org/fhir/us/dental-data-exchange/ValueSet/dental-anatomy|1.0.0'; The provided code 'http://www.ada.org/snodent#210965D ('Anterior part of lower alveolar ridge')' was not found in the value set 'http://hl7.org/fhir/us/dental-data-exchange/ValueSet/dental-anatomy|1.0.0'",
+  "class" : "UNKNOWN",
+  "server" : "http://local.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome",
+  "issue" : [{
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://local.fhir.org/r4"
+    }],
+    "severity" : "information",
+    "code" : "code-invalid",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "this-code-not-in-vs"
+      }],
+      "text" : "The provided code 'http://www.ada.org/snodent#210965D ('Anterior part of lower alveolar ridge')' was not found in the value set 'http://hl7.org/fhir/us/dental-data-exchange/ValueSet/dental-anatomy|1.0.0'"
+    },
+    "location" : ["CodeableConcept.coding[0].code"],
+    "expression" : ["CodeableConcept.coding[0].code"]
+  },
+  {
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://local.fhir.org/r4"
+    }],
+    "severity" : "error",
+    "code" : "code-invalid",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "not-in-vs"
+      }],
+      "text" : "No valid coding was found for the value set 'http://hl7.org/fhir/us/dental-data-exchange/ValueSet/dental-anatomy|1.0.0'"
+    }
+  }]
+}
+
+}
+-------------------------------------------------------------------------------------
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/servers.ini b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/servers.ini
index 180787577..5fec2899b 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/servers.ini
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/servers.ini
@@ -1,3 +1,4 @@
 [servers]
 tx-dev.fhir.org.r4 = http://tx-dev.fhir.org/r4
+local.fhir.org.r4 = http://local.fhir.org/r4
 

From 004d367340c432f3c0587e0ac866b1fd55f0efef Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Tue, 24 Sep 2024 22:27:50 -0400
Subject: [PATCH 53/68] fix tests

---
 .../network/FhirRequestBuilderTests.java      |   4 +-
 .../r4b/utils/client/network/ClientTest.java  |   2 +-
 .../3.0.2/all-systems.cache                   |  32 +-
 .../3.0.2/snomed.cache                        |  88 +-
 .../4.0.1/all-systems.cache                   | 996 +++++++++++++++++-
 .../org.hl7.fhir.validation/4.0.1/loinc.cache | 228 ++--
 .../4.0.1/snomed.cache                        | 527 +++++++++
 .../5.0.0/all-systems.cache                   |  90 +-
 8 files changed, 1780 insertions(+), 187 deletions(-)

diff --git a/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilderTests.java b/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilderTests.java
index 66607a629..7cd2b5edd 100644
--- a/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilderTests.java
+++ b/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilderTests.java
@@ -95,13 +95,13 @@ public class FhirRequestBuilderTests {
     Mockito.doReturn(parser).when(fhirRequestBuilder).getParser(ArgumentMatchers.eq("json"));
 
     fhirRequestBuilder.unmarshalReference(response, "json");
-    Mockito.verify(logger).logResponse(ArgumentMatchers.eq("200"), ArgumentMatchers.anyList(), AdditionalMatchers.aryEq(RESPONSE_BODY_STRING.getBytes()), 0);
+    Mockito.verify(logger).logResponse(ArgumentMatchers.eq("200"), ArgumentMatchers.anyList(), AdditionalMatchers.aryEq(RESPONSE_BODY_STRING.getBytes()), ArgumentMatchers.anyLong());
   }
 
   @Test
   public void testUnmarshallFeedLogging() {
     fhirRequestBuilder.unmarshalFeed(response, "application/json");
-    Mockito.verify(logger).logResponse(ArgumentMatchers.eq("200"), ArgumentMatchers.anyList(), AdditionalMatchers.aryEq(RESPONSE_BODY_STRING.getBytes()), 0);
+    Mockito.verify(logger).logResponse(ArgumentMatchers.eq("200"), ArgumentMatchers.anyList(), AdditionalMatchers.aryEq(RESPONSE_BODY_STRING.getBytes()), ArgumentMatchers.anyLong());
   }
 
 }
diff --git a/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/utils/client/network/ClientTest.java b/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/utils/client/network/ClientTest.java
index 49eea9d99..d9b35f263 100644
--- a/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/utils/client/network/ClientTest.java
+++ b/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/utils/client/network/ClientTest.java
@@ -134,6 +134,6 @@ class ClientTest {
     server.takeRequest();
     Mockito.verify(mockLogger, Mockito.times(1)).logRequest(Mockito.anyString(), Mockito.anyString(), Mockito.anyList(),
         Mockito.any());
-    Mockito.verify(mockLogger, Mockito.times(1)).logResponse(Mockito.anyString(), Mockito.anyList(), Mockito.any(), 0);
+    Mockito.verify(mockLogger, Mockito.times(1)).logResponse(Mockito.anyString(), Mockito.anyList(), Mockito.any(), Mockito.anyLong());
   }
 }
\ No newline at end of file
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/all-systems.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/all-systems.cache
index e3e229430..b9dbc0c77 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/all-systems.cache
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/all-systems.cache
@@ -521,7 +521,6 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -549,7 +548,6 @@ v: {
   "code" : "image/jpg",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -577,7 +575,6 @@ v: {
   "code" : "image/jpg",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -605,7 +602,6 @@ v: {
   "code" : "application/pdf",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -633,7 +629,6 @@ v: {
   "code" : "application/pdf",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -654,7 +649,6 @@ v: {
   "code" : "de-CH",
   "system" : "urn:ietf:bcp:47",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -720,3 +714,29 @@ v: {
 
 }
 -------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "urn:iso:std:iso:3166",
+    "code" : "US",
+    "display" : "United States of America"
+  }]
+}, "url": "http://hl7.org/fhir/ValueSet/jurisdiction", "version": "3.0.2", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "United States of America",
+  "code" : "US",
+  "system" : "urn:iso:std:iso:3166",
+  "version" : "2018",
+  "server" : "http://tx-dev.fhir.org/r3",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/snomed.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/snomed.cache
index 2d71ee595..5b2dabc24 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/snomed.cache
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/3.0.2/snomed.cache
@@ -1108,7 +1108,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1132,7 +1131,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1159,7 +1157,6 @@ v: {
   "error" : "Wrong Display Name 'Laboratory test finding (finding)' for http://snomed.info/sct#118246004. Valid display is one of 4 choices: 'Laboratory test finding', 'Laboratory test observations', 'Laboratory test result' or 'Laboratory test finding (navigational concept)' (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1203,7 +1200,6 @@ v: {
   "error" : "Wrong Display Name 'Chemistry' for http://snomed.info/sct#275711006. Valid display is one of 2 choices: 'Serum chemistry test' or 'Serum chemistry test (procedure)' (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1244,7 +1240,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1268,7 +1263,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1292,7 +1286,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1316,7 +1309,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1340,7 +1332,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1364,7 +1355,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1388,7 +1378,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1413,7 +1402,6 @@ v: {
   "error" : "Unknown code '823681000000100' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1455,7 +1443,6 @@ v: {
   "error" : "Unknown code '886921000000105' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1497,7 +1484,6 @@ v: {
   "error" : "Unknown code '1077881000000105' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1539,7 +1525,6 @@ v: {
   "error" : "Unknown code '887181000000106' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1581,7 +1566,6 @@ v: {
   "error" : "Unknown code '887161000000102' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1623,7 +1607,6 @@ v: {
   "error" : "Unknown code '1052891000000108' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1665,7 +1648,6 @@ v: {
   "error" : "Unknown code '715851000000102' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1707,7 +1689,6 @@ v: {
   "error" : "Unknown code '717121000000105' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1749,7 +1730,6 @@ v: {
   "error" : "Unknown code '933361000000108' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1791,7 +1771,6 @@ v: {
   "error" : "Unknown code '887171000000109' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1833,7 +1812,6 @@ v: {
   "error" : "Unknown code '887201000000105' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1875,7 +1853,6 @@ v: {
   "error" : "Unknown code '1052951000000105' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1917,7 +1894,6 @@ v: {
   "error" : "Unknown code '886731000000109' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -1959,7 +1935,6 @@ v: {
   "error" : "Unknown code '887231000000104' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -2001,7 +1976,6 @@ v: {
   "error" : "Unknown code '9290701000001101' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -2042,7 +2016,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -2066,7 +2039,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -2089,7 +2061,6 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -2113,7 +2084,6 @@ v: {
   "error" : "Unknown code '11181000146103' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r3",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -2137,3 +2107,61 @@ v: {
 
 }
 -------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "17621005",
+    "display" : "Normal (qualifier value)"
+  }]
+}, "url": "http://hl7.org/fhir/ValueSet/security-labels", "version": "3.0.2", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "severity" : "error",
+  "error" : "No valid coding was found for the value set 'http://hl7.org/fhir/ValueSet/security-labels|3.0.2'; The provided code 'http://snomed.info/sct#17621005 ('Normal (qualifier value)')' was not found in the value set 'http://hl7.org/fhir/ValueSet/security-labels|3.0.2'",
+  "class" : "UNKNOWN",
+  "server" : "http://tx-dev.fhir.org/r3",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome",
+  "issue" : [{
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r3"
+    }],
+    "severity" : "information",
+    "code" : "code-invalid",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "this-code-not-in-vs"
+      }],
+      "text" : "The provided code 'http://snomed.info/sct#17621005 ('Normal (qualifier value)')' was not found in the value set 'http://hl7.org/fhir/ValueSet/security-labels|3.0.2'"
+    },
+    "location" : ["CodeableConcept.coding[0].code"],
+    "expression" : ["CodeableConcept.coding[0].code"]
+  },
+  {
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r3"
+    }],
+    "severity" : "error",
+    "code" : "code-invalid",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "not-in-vs"
+      }],
+      "text" : "No valid coding was found for the value set 'http://hl7.org/fhir/ValueSet/security-labels|3.0.2'"
+    }
+  }]
+}
+
+}
+-------------------------------------------------------------------------------------
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/all-systems.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/all-systems.cache
index bd3a9aeea..c293c7f41 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/all-systems.cache
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/all-systems.cache
@@ -4172,7 +4172,6 @@ v: {
   "code" : "application/octet-stream",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4193,7 +4192,6 @@ v: {
   "code" : "application/octet-stream",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4221,7 +4219,6 @@ v: {
   "code" : "image/png",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4242,7 +4239,6 @@ v: {
   "code" : "image/png",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4270,7 +4266,6 @@ v: {
   "code" : "application/pdf",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4291,7 +4286,6 @@ v: {
   "code" : "application/pdf",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4313,7 +4307,6 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4335,7 +4328,6 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4363,7 +4355,6 @@ v: {
   "code" : "image/*",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4384,7 +4375,6 @@ v: {
   "code" : "image/*",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4406,7 +4396,6 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4434,7 +4423,6 @@ v: {
   "code" : "image/jpg",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4455,7 +4443,6 @@ v: {
   "code" : "image/jpg",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4483,7 +4470,6 @@ v: {
   "code" : "json",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4504,7 +4490,6 @@ v: {
   "code" : "json",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4532,7 +4517,6 @@ v: {
   "code" : "xml",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4553,7 +4537,6 @@ v: {
   "code" : "xml",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4581,7 +4564,6 @@ v: {
   "code" : "application/fhir+json",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4602,7 +4584,6 @@ v: {
   "code" : "application/fhir+json",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4630,7 +4611,6 @@ v: {
   "code" : "en-US",
   "system" : "urn:ietf:bcp:47",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4651,7 +4631,6 @@ v: {
   "code" : "en-US",
   "system" : "urn:ietf:bcp:47",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4679,7 +4658,6 @@ v: {
   "code" : "en",
   "system" : "urn:ietf:bcp:47",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4700,7 +4678,6 @@ v: {
   "code" : "en",
   "system" : "urn:ietf:bcp:47",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4728,7 +4705,6 @@ v: {
   "code" : "text/plain",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4749,7 +4725,6 @@ v: {
   "code" : "text/plain",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4777,7 +4752,6 @@ v: {
   "code" : "text/css",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4798,7 +4772,6 @@ v: {
   "code" : "text/css",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4819,7 +4792,6 @@ v: {
   "code" : "de-CH",
   "system" : "urn:ietf:bcp:47",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -4846,7 +4818,6 @@ v: {
   "error" : "The provided code 'http://ihe.net/fhir/ihe.formatcode.fhir/CodeSystem/formatcode#urn:ihe:iti:xds:2017:mimeTypeSufficient ('MimeType sufficient')' was not found in the value set 'http://hl7.org/fhir/ValueSet/formatcodes|4.0.1'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -5009,7 +4980,6 @@ v: {
   "code" : "application/xml",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5030,7 +5000,6 @@ v: {
   "code" : "application/xml",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5058,7 +5027,6 @@ v: {
   "code" : "text/xml",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5079,7 +5047,6 @@ v: {
   "code" : "text/xml",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5223,7 +5190,6 @@ v: {
   "code" : "text/cql.identifier",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5244,7 +5210,6 @@ v: {
   "code" : "text/cql.identifier",
   "system" : "urn:ietf:bcp:13",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5266,7 +5231,6 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5288,7 +5252,6 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5310,7 +5273,6 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -5339,7 +5301,6 @@ v: {
   "error" : "The provided code '#[%payloadFormat%]' was not found in the value set 'urn:uuid:9533d1b4-fecd-469d-9803-fe4fcf81ded5'; The System URI could not be determined for the code '[%payloadFormat%]' in the ValueSet 'urn:uuid:9533d1b4-fecd-469d-9803-fe4fcf81ded5'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -5380,3 +5341,960 @@ v: {
 
 }
 -------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "urn:iso:std:iso:3166",
+    "code" : "CHE"
+  }]
+}, "url": "http://hl7.org/fhir/ValueSet/jurisdiction", "version": "4.0.1", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Switzerland",
+  "code" : "CHE",
+  "system" : "urn:iso:std:iso:3166",
+  "version" : "2018",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "urn:iso:std:iso:3166",
+    "code" : "US",
+    "display" : "United States of America"
+  }]
+}, "url": "http://hl7.org/fhir/ValueSet/jurisdiction", "version": "4.0.1", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "United States of America",
+  "code" : "US",
+  "system" : "urn:iso:std:iso:3166",
+  "version" : "2018",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "32485007",
+    "display" : "Hospital admission (procedure)"
+  }]
+}, "valueSet" :{
+  "resourceType" : "ValueSet",
+  "compose" : {
+    "include" : [{
+      "system" : "http://snomed.info/sct",
+      "concept" : [{
+        "code" : "416406003",
+        "display" : "Undersøkelsen avbrutt",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Procedure discontinued (situation)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "prosedyre avbrutt"
+        }]
+      },
+      {
+        "code" : "103705002",
+        "display" : "Observasjon uten innleggelse",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Patient status observation (procedure)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "observasjon av pasientstatus"
+        }]
+      },
+      {
+        "code" : "32485007",
+        "display" : "Innleggelse",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Hospital admission (procedure)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "sykehusinnleggelse"
+        }]
+      }]
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/special-values",
+      "version" : "4.0.1",
+      "concept" : [{
+        "code" : "nil-known",
+        "display" : "Ingen (med eller uten forlenget prosedyretid)",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Nil Known"
+        }]
+      }]
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "concept" : [{
+        "code" : "OTH",
+        "display" : "Annet",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Other"
+        }]
+      }]
+    }]
+  },
+  "expansion" : {
+    "contains" : [{
+      "system" : "http://snomed.info/sct",
+      "code" : "416406003",
+      "display" : "Undersøkelsen avbrutt"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "103705002",
+      "display" : "Observasjon uten innleggelse"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "32485007",
+      "display" : "Innleggelse"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/special-values",
+      "version" : "4.0.1",
+      "code" : "nil-known",
+      "display" : "Ingen (med eller uten forlenget prosedyretid)"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "code" : "OTH",
+      "display" : "Annet"
+    }]
+  }
+}, "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Hospital admission (procedure)",
+  "code" : "32485007",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "712510007",
+    "display" : "Intestinal hemorrhage (disorder)"
+  }]
+}, "valueSet" :{
+  "resourceType" : "ValueSet",
+  "compose" : {
+    "include" : [{
+      "system" : "http://snomed.info/sct",
+      "concept" : [{
+        "code" : "712510007",
+        "display" : "Blødning",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Intestinal hemorrhage (disorder)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "blødning i tarm"
+        }]
+      },
+      {
+        "code" : "50008003",
+        "display" : "Perforasjon",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Traumatic perforation of large intestine (disorder)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "traumatisk perforasjon av colon"
+        }]
+      },
+      {
+        "code" : "10341000202100",
+        "display" : "Alvorlig vasovagal reaksjon",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Severe vasovagal reaction (disorder)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "alvorlig vasovagal reaksjon"
+        }]
+      },
+      {
+        "code" : "409622000",
+        "display" : "Respiratorisk",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Respiratory failure (disorder)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "respirasjonssvikt"
+        }]
+      },
+      {
+        "code" : "267037003",
+        "display" : "Kardiovaskulær",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Cardiovascular symptoms (finding)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "kardiovaskulært symptom"
+        }]
+      },
+      {
+        "code" : "416093006",
+        "display" : "Allergisk reaksjon på medikament",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Allergic reaction caused by drug (disorder)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "allergisk reaksjon forårsaket av legemiddel"
+        }]
+      }]
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/special-values",
+      "version" : "4.0.1",
+      "concept" : [{
+        "code" : "nil-known",
+        "display" : "Ingen",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Nil Known"
+        }]
+      }]
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "concept" : [{
+        "code" : "OTH",
+        "display" : "Annet",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Other"
+        }]
+      }]
+    }]
+  },
+  "expansion" : {
+    "contains" : [{
+      "system" : "http://snomed.info/sct",
+      "code" : "712510007",
+      "display" : "Blødning"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "50008003",
+      "display" : "Perforasjon"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "10341000202100",
+      "display" : "Alvorlig vasovagal reaksjon"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "409622000",
+      "display" : "Respiratorisk"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "267037003",
+      "display" : "Kardiovaskulær"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "416093006",
+      "display" : "Allergisk reaksjon på medikament"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/special-values",
+      "version" : "4.0.1",
+      "code" : "nil-known",
+      "display" : "Ingen"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "code" : "OTH",
+      "display" : "Annet"
+    }]
+  }
+}, "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Intestinal hemorrhage (disorder)",
+  "code" : "712510007",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "372756006",
+    "display" : "Warfarin (substance)"
+  }]
+}, "valueSet" :{
+  "resourceType" : "ValueSet",
+  "compose" : {
+    "include" : [{
+      "system" : "http://snomed.info/sct",
+      "concept" : [{
+        "code" : "387458008",
+        "display" : "Acetylsalisylsyre",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Aspirin (substance)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "acetylsalisylsyre"
+        }]
+      },
+      {
+        "code" : "372756006",
+        "display" : "Warfarin",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Warfarin (substance)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "warfarin"
+        }]
+      },
+      {
+        "code" : "373294004",
+        "display" : "LMWH",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Low molecular weight heparin (substance)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "lavmolekylært heparin"
+        }]
+      }]
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/special-values",
+      "version" : "4.0.1",
+      "concept" : [{
+        "code" : "nil-known",
+        "display" : "Ingen relevante medisiner",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Nil Known"
+        }]
+      }]
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "concept" : [{
+        "code" : "OTH",
+        "display" : "Annet",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Other"
+        }]
+      },
+      {
+        "code" : "UNK",
+        "display" : "Ukjent/mangler opplysninger",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "unknown"
+        }]
+      }]
+    },
+    {
+      "system" : "http://ehelse.no/fhir/CodeSystem/colonoscopy-model-specific-codes",
+      "concept" : [{
+        "code" : "andre-blodplatehemmere",
+        "display" : "Andre blodplatehemmere",
+        "designation" : [{
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Andre blodplatehemmere"
+        }]
+      },
+      {
+        "code" : "doak",
+        "display" : "DOAK",
+        "designation" : [{
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "DOAK"
+        }]
+      },
+      {
+        "code" : "andre-antikoagulantia",
+        "display" : "Andre antikoagulantia",
+        "designation" : [{
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Andre antikoagulantia"
+        }]
+      }]
+    }]
+  },
+  "expansion" : {
+    "contains" : [{
+      "system" : "http://snomed.info/sct",
+      "code" : "387458008",
+      "display" : "Acetylsalisylsyre"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "372756006",
+      "display" : "Warfarin"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "373294004",
+      "display" : "LMWH"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/special-values",
+      "version" : "4.0.1",
+      "code" : "nil-known",
+      "display" : "Ingen relevante medisiner"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "code" : "OTH",
+      "display" : "Annet"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "code" : "UNK",
+      "display" : "Ukjent/mangler opplysninger"
+    },
+    {
+      "system" : "http://ehelse.no/fhir/CodeSystem/colonoscopy-model-specific-codes",
+      "code" : "andre-blodplatehemmere",
+      "display" : "Andre blodplatehemmere"
+    },
+    {
+      "system" : "http://ehelse.no/fhir/CodeSystem/colonoscopy-model-specific-codes",
+      "code" : "doak",
+      "display" : "DOAK"
+    },
+    {
+      "system" : "http://ehelse.no/fhir/CodeSystem/colonoscopy-model-specific-codes",
+      "code" : "andre-antikoagulantia",
+      "display" : "Andre antikoagulantia"
+    }]
+  }
+}, "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Warfarin (substance)",
+  "code" : "372756006",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "387458008",
+    "display" : "Aspirin (substance)"
+  }]
+}, "valueSet" :{
+  "resourceType" : "ValueSet",
+  "compose" : {
+    "include" : [{
+      "system" : "http://snomed.info/sct",
+      "concept" : [{
+        "code" : "387458008",
+        "display" : "Acetylsalisylsyre",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Aspirin (substance)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "acetylsalisylsyre"
+        }]
+      },
+      {
+        "code" : "372756006",
+        "display" : "Warfarin",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Warfarin (substance)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "warfarin"
+        }]
+      },
+      {
+        "code" : "373294004",
+        "display" : "LMWH",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Low molecular weight heparin (substance)"
+        },
+        {
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "lavmolekylært heparin"
+        }]
+      }]
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/special-values",
+      "version" : "4.0.1",
+      "concept" : [{
+        "code" : "nil-known",
+        "display" : "Ingen relevante medisiner",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Nil Known"
+        }]
+      }]
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "concept" : [{
+        "code" : "OTH",
+        "display" : "Annet",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Other"
+        }]
+      },
+      {
+        "code" : "UNK",
+        "display" : "Ukjent/mangler opplysninger",
+        "designation" : [{
+          "language" : "en",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "unknown"
+        }]
+      }]
+    },
+    {
+      "system" : "http://ehelse.no/fhir/CodeSystem/colonoscopy-model-specific-codes",
+      "concept" : [{
+        "code" : "andre-blodplatehemmere",
+        "display" : "Andre blodplatehemmere",
+        "designation" : [{
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Andre blodplatehemmere"
+        }]
+      },
+      {
+        "code" : "doak",
+        "display" : "DOAK",
+        "designation" : [{
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "DOAK"
+        }]
+      },
+      {
+        "code" : "andre-antikoagulantia",
+        "display" : "Andre antikoagulantia",
+        "designation" : [{
+          "language" : "no",
+          "use" : {
+            "system" : "http://snomed.info/sct",
+            "code" : "900000000000003001",
+            "display" : "Fully specified name"
+          },
+          "value" : "Andre antikoagulantia"
+        }]
+      }]
+    }]
+  },
+  "expansion" : {
+    "contains" : [{
+      "system" : "http://snomed.info/sct",
+      "code" : "387458008",
+      "display" : "Acetylsalisylsyre"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "372756006",
+      "display" : "Warfarin"
+    },
+    {
+      "system" : "http://snomed.info/sct",
+      "code" : "373294004",
+      "display" : "LMWH"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/special-values",
+      "version" : "4.0.1",
+      "code" : "nil-known",
+      "display" : "Ingen relevante medisiner"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "code" : "OTH",
+      "display" : "Annet"
+    },
+    {
+      "system" : "http://terminology.hl7.org/CodeSystem/v3-NullFlavor",
+      "version" : "2018-08-12",
+      "code" : "UNK",
+      "display" : "Ukjent/mangler opplysninger"
+    },
+    {
+      "system" : "http://ehelse.no/fhir/CodeSystem/colonoscopy-model-specific-codes",
+      "code" : "andre-blodplatehemmere",
+      "display" : "Andre blodplatehemmere"
+    },
+    {
+      "system" : "http://ehelse.no/fhir/CodeSystem/colonoscopy-model-specific-codes",
+      "code" : "doak",
+      "display" : "DOAK"
+    },
+    {
+      "system" : "http://ehelse.no/fhir/CodeSystem/colonoscopy-model-specific-codes",
+      "code" : "andre-antikoagulantia",
+      "display" : "Andre antikoagulantia"
+    }]
+  }
+}, "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Aspirin (substance)",
+  "code" : "387458008",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "urn:iso:std:iso:3166",
+    "code" : "US"
+  }]
+}, "url": "http://hl7.org/fhir/ValueSet/jurisdiction", "version": "4.0.1", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "United States of America",
+  "code" : "US",
+  "system" : "urn:iso:std:iso:3166",
+  "version" : "2018",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/loinc.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/loinc.cache
index 50ce7df35..9e797a65f 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/loinc.cache
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/loinc.cache
@@ -8422,7 +8422,6 @@ v: {
   "error" : "Wrong Display Name 'O2 % BldC Oximetry' for http://loinc.org#59408-5. Valid display is 'Oxygen saturation in Arterial blood by Pulse oximetry' (en-US) (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -8463,7 +8462,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8489,7 +8487,6 @@ v: {
   "error" : "The provided code 'http://loinc.org#59408-5' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -8529,7 +8526,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8553,7 +8549,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8579,7 +8574,6 @@ v: {
   "error" : "The provided code 'http://loinc.org#3150-0' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -8623,7 +8617,6 @@ v: {
   "error" : "Wrong Display Name 'Flow Rate' for http://loinc.org#3151-8. Valid display is 'Inhaled oxygen flow rate' (en-US) (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -8666,7 +8659,6 @@ v: {
   "error" : "The provided code 'http://loinc.org#3151-8' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -8706,7 +8698,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8732,7 +8723,6 @@ v: {
   "error" : "The provided code 'http://loinc.org#2708-6' was not found in the value set 'http://hl7.org/fhir/us/core/ValueSet/us-core-vital-signs--0|4.0.0'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -8772,7 +8762,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8795,7 +8784,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8818,7 +8806,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8844,7 +8831,6 @@ v: {
   "error" : "The provided code 'http://loinc.org#100066-0' was not found in the value set 'http://hl7.org/fhir/test/StructureDefinition/additional-bindings-vs1--0|1.0.0'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -8884,7 +8870,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8907,7 +8892,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8930,7 +8914,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8954,7 +8937,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -8978,7 +8960,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9002,7 +8983,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9026,7 +9006,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9049,7 +9028,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9073,7 +9051,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9096,7 +9073,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9120,7 +9096,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9143,7 +9118,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9167,7 +9141,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9190,7 +9163,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9214,7 +9186,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9237,7 +9208,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9261,7 +9231,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9284,7 +9253,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9308,7 +9276,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9332,7 +9299,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9359,7 +9325,6 @@ v: {
   "error" : "Wrong Display Name 'Patient Authorization Signature' for http://loinc.org#59284-0. Valid display is 'Consent Document' (en-US) (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -9399,7 +9364,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9423,7 +9387,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9446,7 +9409,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9470,7 +9432,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9494,7 +9455,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9518,7 +9478,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9545,7 +9504,6 @@ v: {
   "error" : "Wrong Display Name 'NDC labeler code request' for http://loinc.org#51726-8. Valid display is 'FDA product label NDC labeler code request' (en-US) (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -9586,7 +9544,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9611,7 +9568,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9634,7 +9590,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9662,7 +9617,6 @@ v: {
   "error" : "Wrong Display Name 'Allergies and adverse reactions' for http://loinc.org#48765-2. Valid display is 'Allergies and adverse reactions Document' (en-US) (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -9703,7 +9657,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9726,7 +9679,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9749,7 +9701,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9773,7 +9724,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9796,7 +9746,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9821,7 +9770,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9845,7 +9793,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9868,7 +9815,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9892,7 +9838,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9915,7 +9860,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9939,7 +9883,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9962,7 +9905,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -9986,7 +9928,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10010,7 +9951,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10033,7 +9973,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10057,7 +9996,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10080,7 +10018,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10103,7 +10040,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10128,7 +10064,6 @@ v: {
   "error" : "Unknown code '�g��' in the CodeSystem 'http://loinc.org' version '2.77'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -10169,7 +10104,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10196,7 +10130,6 @@ v: {
   "error" : "Wrong Display Name '����' for http://loinc.org#18684-1. Valid display is 'First Blood pressure Set' (en-US) (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -10240,7 +10173,6 @@ v: {
   "error" : "Wrong Display Name '���k������' for http://loinc.org#8480-6. Valid display is 'Systolic blood pressure' (en-US) (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -10284,7 +10216,6 @@ v: {
   "error" : "Wrong Display Name '�g��������' for http://loinc.org#8462-4. Valid display is 'Diastolic blood pressure' (en-US) (for the language(s) 'en-US')",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -10325,7 +10256,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10349,7 +10279,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10373,7 +10302,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10397,7 +10325,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10422,7 +10349,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10447,7 +10373,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10471,7 +10396,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10495,7 +10419,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10518,7 +10441,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10541,7 +10463,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10564,7 +10485,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10587,7 +10507,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10610,7 +10529,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10633,7 +10551,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10656,7 +10573,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10679,7 +10595,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10702,7 +10617,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10737,7 +10651,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10772,7 +10685,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10807,7 +10719,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10831,7 +10742,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10854,7 +10764,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10877,7 +10786,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10901,7 +10809,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10927,7 +10834,6 @@ v: {
   "error" : "The provided code 'http://loinc.org#76534-7' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'",
   "class" : "UNKNOWN",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome",
   "issue" : [{
@@ -10967,7 +10873,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -10991,7 +10896,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11015,7 +10919,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11039,7 +10942,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11063,7 +10965,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11087,7 +10988,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11111,7 +11011,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11135,7 +11034,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11158,7 +11056,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11181,7 +11078,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11205,7 +11101,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11229,7 +11124,6 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -11252,6 +11146,82 @@ v: {
   "system" : "http://loinc.org",
   "version" : "2.77",
   "server" : "http://tx-dev.fhir.org/r4",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://loinc.org",
+    "code" : "59408-5",
+    "display" : "O2 % BldC Oximetry"
+  },
+  {
+    "system" : "http://loinc.org",
+    "code" : "2708-6",
+    "display" : "Oxygen saturation in Arterial blood"
+  }]
+}, "url": "http://hl7.org/fhir/us/core/ValueSet/us-core-vital-signs", "version": "4.0.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Oxygen saturation in Arterial blood",
+  "code" : "2708-6",
+  "system" : "http://loinc.org",
+  "version" : "2.78",
+  "severity" : "error",
+  "error" : "Wrong Display Name 'O2 % BldC Oximetry' for http://loinc.org#59408-5. Valid display is one of 3 choices: 'Oxygen saturation in Arterial blood by Pulse oximetry' (en-US), 'Oxygen saturation in Arterial blood by Pulse oximetry' (en-US) or 'SaO2 % BldA PulseOx' (en-US) (for the language(s) 'en-US')",
+  "class" : "UNKNOWN",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome",
+  "issue" : [{
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r4"
+    }],
+    "severity" : "error",
+    "code" : "invalid",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "invalid-display"
+      }],
+      "text" : "Wrong Display Name 'O2 % BldC Oximetry' for http://loinc.org#59408-5. Valid display is one of 3 choices: 'Oxygen saturation in Arterial blood by Pulse oximetry' (en-US), 'Oxygen saturation in Arterial blood by Pulse oximetry' (en-US) or 'SaO2 % BldA PulseOx' (en-US) (for the language(s) 'en-US')"
+    },
+    "location" : ["CodeableConcept.coding[0].display"],
+    "expression" : ["CodeableConcept.coding[0].display"]
+  }]
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://loinc.org",
+    "code" : "3150-0",
+    "display" : "Inhaled Oxygen Concentration"
+  }]
+}, "url": "http://hl7.org/fhir/us/core/ValueSet/us-core-vital-signs", "version": "4.0.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Inhaled oxygen concentration",
+  "code" : "3150-0",
+  "system" : "http://loinc.org",
+  "version" : "2.78",
+  "server" : "http://tx-dev.fhir.org/r4",
   "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
@@ -11259,3 +11229,49 @@ v: {
 
 }
 -------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://loinc.org",
+    "code" : "3151-8",
+    "display" : "Flow Rate"
+  }]
+}, "url": "http://hl7.org/fhir/us/core/ValueSet/us-core-vital-signs", "version": "4.0.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Inhaled oxygen flow rate",
+  "code" : "3151-8",
+  "system" : "http://loinc.org",
+  "version" : "2.78",
+  "severity" : "error",
+  "error" : "Wrong Display Name 'Flow Rate' for http://loinc.org#3151-8. Valid display is one of 4 choices: 'Inhaled oxygen flow rate' (en-US), 'Inhaled oxygen flow rate' (en-US), 'Inhaled O2 flow rate' (en-US) or 'Inhaled oxygen' (en-US) (for the language(s) 'en-US')",
+  "class" : "UNKNOWN",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome",
+  "issue" : [{
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r4"
+    }],
+    "severity" : "error",
+    "code" : "invalid",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "invalid-display"
+      }],
+      "text" : "Wrong Display Name 'Flow Rate' for http://loinc.org#3151-8. Valid display is one of 4 choices: 'Inhaled oxygen flow rate' (en-US), 'Inhaled oxygen flow rate' (en-US), 'Inhaled O2 flow rate' (en-US) or 'Inhaled oxygen' (en-US) (for the language(s) 'en-US')"
+    },
+    "location" : ["CodeableConcept.coding[0].display"],
+    "expression" : ["CodeableConcept.coding[0].display"]
+  }]
+}
+
+}
+-------------------------------------------------------------------------------------
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/snomed.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/snomed.cache
index 336ec053b..2f27095a0 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/snomed.cache
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/snomed.cache
@@ -14292,6 +14292,533 @@ v: {
   "system" : "http://snomed.info/sct",
   "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
   "server" : "http://tx-dev.fhir.org/r4",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "17621005",
+    "display" : "Normal (qualifier value)"
+  }]
+}, "url": "http://hl7.org/fhir/ValueSet/security-labels", "version": "4.0.1", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "severity" : "error",
+  "error" : "No valid coding was found for the value set 'http://hl7.org/fhir/ValueSet/security-labels|4.0.1'; The provided code 'http://snomed.info/sct#17621005 ('Normal (qualifier value)')' was not found in the value set 'http://hl7.org/fhir/ValueSet/security-labels|4.0.1'",
+  "class" : "UNKNOWN",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome",
+  "issue" : [{
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id",
+      "valueString" : "MSG_RETIRED"
+    },
+    {
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r4"
+    }],
+    "severity" : "information",
+    "code" : "business-rule",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "status-check"
+      }],
+      "text" : "Reference to retired ValueSet http://terminology.hl7.org/ValueSet/v3-ActUSPrivacyLaw|2.0.0"
+    }
+  },
+  {
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r4"
+    }],
+    "severity" : "information",
+    "code" : "code-invalid",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "this-code-not-in-vs"
+      }],
+      "text" : "The provided code 'http://snomed.info/sct#17621005 ('Normal (qualifier value)')' was not found in the value set 'http://hl7.org/fhir/ValueSet/security-labels|4.0.1'"
+    },
+    "location" : ["CodeableConcept.coding[0].code"],
+    "expression" : ["CodeableConcept.coding[0].code"]
+  },
+  {
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r4"
+    }],
+    "severity" : "error",
+    "code" : "code-invalid",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "not-in-vs"
+      }],
+      "text" : "No valid coding was found for the value set 'http://hl7.org/fhir/ValueSet/security-labels|4.0.1'"
+    }
+  }]
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "96067005",
+    "display" : "Flucloxacillin-containing product"
+  }]
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/allergy-intolerance-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing flucloxacillin (medicinal product)",
+  "code" : "96067005",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "48546005",
+    "display" : "Diazepam-containing product"
+  }]
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/allergy-intolerance-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing diazepam (medicinal product)",
+  "code" : "48546005",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "40425004",
+    "display" : "Postconcussion syndrome"
+  }]
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/problems-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Postconcussion syndrome",
+  "code" : "40425004",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "237599002",
+    "display" : "Diabetes type 2 on insulin"
+  }]
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/problems-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Insulin treated Type II diabetes mellitus",
+  "code" : "237599002",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "90560007",
+    "display" : "Gout"
+  }]
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/problems-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Gout",
+  "code" : "90560007",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "1201005",
+    "display" : "Benign essential hypertension"
+  }]
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/problems-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Benign essential hypertension",
+  "code" : "1201005",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "52910006",
+    "display" : "Anxiety disorder due to a general medical condition"
+  }]
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/problems-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Anxiety disorder due to a general medical condition",
+  "code" : "52910006",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "5913000",
+    "display" : "Fracture of neck of femur"
+  }]
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/problems-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Fracture of neck of femur",
+  "code" : "5913000",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "126212009",
+    "display" : "Product containing insulin glargine (medicinal product)"
+  }],
+  "text" : "insulin glargine 100 international units/mL injection, 10 mL vial"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing insulin glargine (medicinal product)",
+  "code" : "126212009",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "714081009",
+    "display" : "Product containing dulaglutide (medicinal product)"
+  }],
+  "text" : "dulaglutide 1.5 mg/0.5 mL injection, prefilled injection device"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing dulaglutide (medicinal product)",
+  "code" : "714081009",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "109081006",
+    "display" : "Product containing metformin (medicinal product)"
+  }],
+  "text" : "metformin hydrochloride 1000 mg tablet"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing metformin (medicinal product)",
+  "code" : "109081006",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "108537001",
+    "display" : "Product containing amlodipine (medicinal product)"
+  }],
+  "text" : "amlodipine 5 mg tablet"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing amlodipine (medicinal product)",
+  "code" : "108537001",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "96309000",
+    "display" : "Product containing losartan (medicinal product)"
+  }],
+  "text" : "losartan potassium 50 mg tablet"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing losartan (medicinal product)",
+  "code" : "96309000",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "7947003",
+    "display" : "Product containing aspirin (medicinal product)"
+  }],
+  "text" : "aspirin 75 mg tablet: enteric-coated"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing aspirin (medicinal product)",
+  "code" : "7947003",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "25246002",
+    "display" : "Product containing allopurinol (medicinal product)"
+  }],
+  "text" : "allopurinol 300 mg tablet"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Product containing allopurinol (medicinal product)",
+  "code" : "25246002",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "265132005",
+    "display" : "Primary open reduction and internal fixation of proximal femoral fracture with screw/nail and plate device"
+  }],
+  "text" : "Operative procedure on hip"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/procedures-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Primary open reduction and internal fixation of proximal femoral fracture with screw/nail and plate device",
+  "code" : "265132005",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome"
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://snomed.info/sct",
+    "code" : "287903004",
+    "display" : "Suturing of hand"
+  }],
+  "text" : "Hand closure"
+}, "url": "http://hl7.org/fhir/uv/ips/ValueSet/procedures-snomed-absent-unknown-uv-ips", "version": "1.1.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "Suturing of hand",
+  "code" : "287903004",
+  "system" : "http://snomed.info/sct",
+  "version" : "http://snomed.info/sct/900000000000207008/version/20240201",
+  "server" : "http://tx-dev.fhir.org/r4",
   "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/5.0.0/all-systems.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/5.0.0/all-systems.cache
index 8a9098081..989978662 100644
--- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/5.0.0/all-systems.cache
+++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/5.0.0/all-systems.cache
@@ -1038,7 +1038,6 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1059,7 +1058,6 @@ v: {
   "code" : "fr-CA",
   "system" : "urn:ietf:bcp:47",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
@@ -1081,10 +1079,96 @@ v: {
   "system" : "http://unitsofmeasure.org",
   "version" : "2.0.1",
   "server" : "http://tx-dev.fhir.org/r4",
-  "unknown-systems" : "",
   "issues" : {
   "resourceType" : "OperationOutcome"
 }
 
 }
 -------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://unstats.un.org/unsd/methods/m49/m49.htm",
+    "code" : "001"
+  }]
+}, "url": "http://hl7.org/fhir/ValueSet/jurisdiction", "version": "5.0.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "World",
+  "code" : "001",
+  "system" : "http://unstats.un.org/unsd/methods/m49/m49.htm",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome",
+  "issue" : [{
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id",
+      "valueString" : "MSG_DEPRECATED"
+    },
+    {
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r4"
+    }],
+    "severity" : "information",
+    "code" : "business-rule",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "status-check"
+      }],
+      "text" : "Reference to deprecated ValueSet http://hl7.org/fhir/ValueSet/jurisdiction|5.0.0"
+    }
+  }]
+}
+
+}
+-------------------------------------------------------------------------------------
+{"code" : {
+  "coding" : [{
+    "system" : "http://unstats.un.org/unsd/methods/m49/m49.htm",
+    "code" : "001",
+    "display" : "World"
+  }]
+}, "url": "http://hl7.org/fhir/ValueSet/jurisdiction", "version": "5.0.0", "langs":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
+  "resourceType" : "Parameters",
+  "parameter" : [{
+    "name" : "profile-url",
+    "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
+  }]
+}}####
+v: {
+  "display" : "World",
+  "code" : "001",
+  "system" : "http://unstats.un.org/unsd/methods/m49/m49.htm",
+  "server" : "http://tx-dev.fhir.org/r4",
+  "unknown-systems" : "",
+  "issues" : {
+  "resourceType" : "OperationOutcome",
+  "issue" : [{
+    "extension" : [{
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id",
+      "valueString" : "MSG_DEPRECATED"
+    },
+    {
+      "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server",
+      "valueUrl" : "http://tx-dev.fhir.org/r4"
+    }],
+    "severity" : "information",
+    "code" : "business-rule",
+    "details" : {
+      "coding" : [{
+        "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type",
+        "code" : "status-check"
+      }],
+      "text" : "Reference to deprecated ValueSet http://hl7.org/fhir/ValueSet/jurisdiction|5.0.0"
+    }
+  }]
+}
+
+}
+-------------------------------------------------------------------------------------

From 54353f8fce7605b6dd7e777c1bbfa9685487c989 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Wed, 25 Sep 2024 05:15:49 -0400
Subject: [PATCH 54/68] Add more logging for too costly validation

---
 .../expansion/ValueSetExpander.java           | 26 +++++------
 .../TerminologyOperationContext.java          | 22 +++++++++-
 .../validation/ValueSetValidator.java         | 44 ++++++++++++-------
 3 files changed, 60 insertions(+), 32 deletions(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/expansion/ValueSetExpander.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/expansion/ValueSetExpander.java
index 7e1cfbbf7..82fd94efd 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/expansion/ValueSetExpander.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/expansion/ValueSetExpander.java
@@ -188,7 +188,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
   private ValueSetExpansionContainsComponent addCode(WorkingContext wc, String system, String code, String display, String dispLang, ValueSetExpansionContainsComponent parent, List designations, Parameters expParams, 
       boolean isAbstract, boolean inactive, List filters, boolean noInactive, boolean deprecated, List vsProp, 
       List csProps, CodeSystem cs, List expProps, List csExtList, List vsExtList, ValueSetExpansionComponent exp) throws ETooCostly {
-    opContext.deadCheck();
+    opContext.deadCheck("addCode"+code);
     
     if (filters != null && !filters.isEmpty() && !filterContainsCode(filters, system, code, exp))
       return null;
@@ -447,7 +447,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
   }
 
   private void addCodeAndDescendents(WorkingContext wc, ValueSetExpansionContainsComponent focus, ValueSetExpansionContainsComponent parent, Parameters expParams, List filters, boolean noInactive, List vsProps, ValueSet vsSrc, ValueSetExpansionComponent exp)  throws FHIRException, ETooCostly {
-    opContext.deadCheck();
+    opContext.deadCheck("addCodeAndDescendents");
     focus.checkNoModifiers("Expansion.contains", "expanding");
     ValueSetExpansionContainsComponent np = null;
     for (String code : getCodesForConcept(focus, expParams)) {
@@ -497,7 +497,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
 
   private void addCodeAndDescendents(WorkingContext wc, CodeSystem cs, String system, ConceptDefinitionComponent def, ValueSetExpansionContainsComponent parent, Parameters expParams, List filters, 
         ConceptDefinitionComponent exclusion, ConceptFilter filterFunc, boolean noInactive, List vsProps, List otherFilters, ValueSetExpansionComponent exp)  throws FHIRException, ETooCostly {
-    opContext.deadCheck();
+    opContext.deadCheck("addCodeAndDescendents");
     def.checkNoModifiers("Code in Code System", "expanding");
     if (exclusion != null) {
       if (exclusion.getCode().equals(def.getCode()))
@@ -528,7 +528,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
 
   private void excludeCodeAndDescendents(WorkingContext wc, CodeSystem cs, String system, ConceptDefinitionComponent def, Parameters expParams, List filters, 
       ConceptDefinitionComponent exclusion, ConceptFilter filterFunc, List otherFilters, ValueSetExpansionComponent exp)  throws FHIRException, ETooCostly {
-    opContext.deadCheck();
+    opContext.deadCheck("excludeCodeAndDescendents");
     def.checkNoModifiers("Code in Code System", "expanding");
     if (exclusion != null) {
       if (exclusion.getCode().equals(def.getCode()))
@@ -596,7 +596,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
   }
 
   private void excludeCodes(WorkingContext wc, ConceptSetComponent exc, Parameters expParams, ValueSetExpansionComponent exp, ValueSet vs) throws FHIRException, FileNotFoundException, ETooCostly, IOException {
-    opContext.deadCheck();
+    opContext.deadCheck("excludeCodes");
     exc.checkNoModifiers("Compose.exclude", "expanding");
     if (exc.hasSystem() && exc.getConcept().size() == 0 && exc.getFilter().size() == 0) {
       wc.getExcludeSystems().add(exc.getSystem());
@@ -639,7 +639,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
   }
 
   private void excludeCodes(WorkingContext wc, ValueSetExpansionComponent expand) {
-    opContext.deadCheck();
+    opContext.deadCheck("excludeCodes");
     for (ValueSetExpansionContainsComponent c : expand.getContains()) {
       excludeCode(wc, c.getSystem(), c.getCode());
     }
@@ -959,7 +959,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
   }
 
   public void copyExpansion(WorkingContext wc,List list) {
-    opContext.deadCheck();
+    opContext.deadCheck("copyExpansion");
     for (ValueSetExpansionContainsComponent cc : list) {
        ValueSetExpansionContainsComponent n = new ValueSet.ValueSetExpansionContainsComponent();
        n.setSystem(cc.getSystem());
@@ -988,7 +988,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
 
   private int copyImportContains(List list, ValueSetExpansionContainsComponent parent, Parameters expParams, List filter, boolean noInactive, List vsProps, ValueSet vsSrc, ValueSetExpansionComponent exp) throws FHIRException, ETooCostly {
     int count = 0;
-    opContext.deadCheck();
+    opContext.deadCheck("copyImportContains");
     for (ValueSetExpansionContainsComponent c : list) {
       c.checkNoModifiers("Imported Expansion in Code System", "expanding");
       ValueSetExpansionContainsComponent np = addCode(dwc, c.getSystem(), c.getCode(), c.getDisplay(), vsSrc.getLanguage(), parent, null, expParams, c.getAbstract(), c.getInactive(), 
@@ -1002,7 +1002,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
   }
 
   private void includeCodes(ConceptSetComponent inc, ValueSetExpansionComponent exp, Parameters expParams, boolean heirarchical, boolean noInactive, List extensions, ValueSet valueSet) throws ETooCostly, FileNotFoundException, IOException, FHIRException, CodeSystemProviderExtension {
-    opContext.deadCheck();
+    opContext.deadCheck("includeCodes");
     inc.checkNoModifiers("Compose.include", "expanding");
     List imports = new ArrayList();
     for (CanonicalType imp : inc.getValueSet()) {
@@ -1033,7 +1033,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
   }
 
   private void doServerIncludeCodes(ConceptSetComponent inc, boolean heirarchical, ValueSetExpansionComponent exp, List imports, Parameters expParams, List extensions, boolean noInactive, List vsProps) throws FHIRException, CodeSystemProviderExtension, ETooCostly {
-    opContext.deadCheck();
+    opContext.deadCheck("doServerIncludeCodes");
     CodeSystemProvider csp = CodeSystemProvider.factory(inc.getSystem());
     if (csp != null) {
       csp.includeCodes(inc, heirarchical, exp, imports, expParams, extensions, noInactive, vsProps);
@@ -1075,7 +1075,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
 
 
   public void doInternalIncludeCodes(ConceptSetComponent inc, ValueSetExpansionComponent exp, Parameters expParams, List imports, CodeSystem cs, boolean noInactive, Resource vsSrc) throws NoTerminologyServiceException, TerminologyServiceException, FHIRException, ETooCostly {
-    opContext.deadCheck();
+    opContext.deadCheck("doInternalIncludeCodes");
     if (cs == null) {
       if (context.isNoTerminologyServer())
         throw failTSE("Unable to find code system " + inc.getSystem().toString());
@@ -1160,7 +1160,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
   private void processFilter(ConceptSetComponent inc, ValueSetExpansionComponent exp, Parameters expParams, List imports, CodeSystem cs, boolean noInactive, 
       ConceptSetFilterComponent fc, WorkingContext wc, List filters, boolean exclude)
       throws ETooCostly {
-    opContext.deadCheck();
+    opContext.deadCheck("processFilter");
     if ("concept".equals(fc.getProperty()) && fc.getOp() == FilterOperator.ISA) {
       // special: all codes in the target code system under the value
       ConceptDefinitionComponent def = getConceptForCode(cs.getConcept(), fc.getValue());
@@ -1213,7 +1213,7 @@ public class ValueSetExpander extends ValueSetProcessBase {
         if (isNotBlank(def.getDisplay()) && isNotBlank(fc.getValue())) {
           if (def.getDisplay().contains(fc.getValue()) && passesOtherFilters(filters, cs, def.getCode())) {
             for (String code : getCodesForConcept(def, expParams)) {
-              opContext.deadCheck();
+              opContext.deadCheck("processFilter2");
               if (exclude) {
                 excludeCode(wc, inc.getSystem(), code);
               } else {
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java
index d4b6234eb..5ac1cd591 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java
@@ -7,6 +7,7 @@ import org.hl7.fhir.exceptions.TerminologyServiceException;
 import org.hl7.fhir.r5.context.IWorkerContext;
 import org.hl7.fhir.r5.model.OperationOutcome.IssueType;
 import org.hl7.fhir.r5.terminologies.utilities.TerminologyOperationContext.TerminologyServiceProtectionException;
+import org.hl7.fhir.utilities.Utilities;
 import org.hl7.fhir.utilities.i18n.I18nConstants;
 import org.hl7.fhir.utilities.validation.ValidationOptions;
 
@@ -38,11 +39,14 @@ public class TerminologyOperationContext {
   public static boolean debugging = java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;
   private static final int EXPANSION_DEAD_TIME_SECS = 60;
   private long deadTime;
+  private int nestCount = 0;
+  private long startTime;
   private List contexts = new ArrayList<>();
   private IWorkerContext worker;
   private boolean original;
   private ValidationOptions options;
   private String name;
+  private List notes = new ArrayList<>();
   
   public TerminologyOperationContext(IWorkerContext worker, ValidationOptions options, String name) {
     super();
@@ -50,6 +54,7 @@ public class TerminologyOperationContext {
     this.original = true;
     this.options = options;
     this.name = name;
+    this.startTime = System.currentTimeMillis();
     
     if (EXPANSION_DEAD_TIME_SECS == 0 || debugging) {
       deadTime = 0;
@@ -62,6 +67,7 @@ public class TerminologyOperationContext {
     super();
     this.options = options;
     this.name = name;
+    this.startTime = System.currentTimeMillis();
   }
 
   public TerminologyOperationContext copy() {
@@ -69,11 +75,20 @@ public class TerminologyOperationContext {
     ret.worker = worker;
     ret.contexts.addAll(contexts);
     ret.deadTime = deadTime;
+    ret.notes = notes;
+    ret.startTime = startTime;
+    ret.nestCount = nestCount + 1;
     return ret;
   }
   
-  public void deadCheck() {
+  public void deadCheck(String note) {
+    note(note);
     if (deadTime != 0 &&  System.currentTimeMillis() > deadTime) {
+      System.out.println();
+      System.out.println("Operation took too long - longer than "+(deadTime - startTime)+"ms");
+      for (String s : notes) {
+        System.out.println(s);
+      }
       throw new TerminologyServiceProtectionException(worker.formatMessage(I18nConstants.VALUESET_TOO_COSTLY_TIME, contexts.get(0), EXPANSION_DEAD_TIME_SECS, name+" (local)"), TerminologyServiceErrorClass.TOO_COSTLY, IssueType.TOOCOSTLY);
     }
   }
@@ -93,5 +108,8 @@ public class TerminologyOperationContext {
     return options;
   }
 
-  
+  public void note(String s) {
+    s = Utilities.padLeft("", ' ', nestCount)+" "+(System.currentTimeMillis() - startTime)+" "+s;
+    notes.add(s);
+  }
 }
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
index c811be7be..159c7eb69 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
@@ -175,11 +175,15 @@ public class ValueSetValidator extends ValueSetProcessBase {
   }
 
   private void analyseValueSet() {
+    opContext.note("analyse");
     if (valueset != null) {
+      opContext.note("vs = "+valueset.getVersionedUrl());
       opContext.seeContext(valueset.getVersionedUrl());
       for (Extension s : valueset.getExtensionsByUrl(ExtensionConstants.EXT_VSSUPPLEMENT)) {
         requiredSupplements.add(s.getValue().primitiveValue());
       }
+    } else {
+      opContext.note("vs = null");
     }
 
     altCodeParams.seeParameters(expansionProfile);
@@ -187,17 +191,18 @@ public class ValueSetValidator extends ValueSetProcessBase {
     if (localContext != null) {
       if (valueset != null) {
         for (ConceptSetComponent i : valueset.getCompose().getInclude()) {
-          analyseComponent(i);
+          analyseComponent(i, "inc"+i);
         }
         for (ConceptSetComponent i : valueset.getCompose().getExclude()) {
-          analyseComponent(i);
+          analyseComponent(i, "exc"+i);
         }
       }
     }
+    opContext.note("analysed");
   }
 
-  private void analyseComponent(ConceptSetComponent i) {
-    opContext.deadCheck();
+  private void analyseComponent(ConceptSetComponent i, String name) {
+    opContext.deadCheck("analyse Component "+name);
     if (i.getSystemElement().hasExtension(ToolingExtensions.EXT_VALUESET_SYSTEM)) {
       String ref = i.getSystemElement().getExtensionString(ToolingExtensions.EXT_VALUESET_SYSTEM);
       if (ref.startsWith("#")) {
@@ -219,7 +224,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
   }
   
   public ValidationResult validateCode(String path, CodeableConcept code) throws FHIRException {
-    opContext.deadCheck();
+    opContext.deadCheck("validate "+code.toString());
     checkValueSetOptions();
 
     // first, we validate the codings themselves
@@ -509,7 +514,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
   }
   
   public ValidationResult validateCode(String path, Coding code) throws FHIRException {
-    opContext.deadCheck();
+    opContext.deadCheck("validate "+code.toString());
     checkValueSetOptions();
     
     String warningMessage = null;
@@ -841,7 +846,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
 
   private ValidationResult findCodeInExpansion(Coding code, List contains) {
     for (ValueSetExpansionContainsComponent containsComponent: contains) {
-      opContext.deadCheck();
+      opContext.deadCheck("findCodeInExpansion");
       if (containsComponent.getSystem().equals(code.getSystem()) && containsComponent.getCode().equals(code.getCode())) {
         ConceptDefinitionComponent ccd = new ConceptDefinitionComponent();
         ccd.setCode(containsComponent.getCode());
@@ -868,7 +873,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
 
   private boolean checkExpansion(Coding code, List contains, VersionInfo vi) {
     for (ValueSetExpansionContainsComponent containsComponent: contains) {
-      opContext.deadCheck();
+      opContext.deadCheck("checkExpansion: "+code.toString());
       if (containsComponent.hasSystem() && containsComponent.hasCode() && containsComponent.getSystem().equals(code.getSystem()) && containsComponent.getCode().equals(code.getCode())) {
         vi.setExpansionVersion(containsComponent.getVersion());
         return true;
@@ -925,7 +930,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
     }
     
     for (ConceptDefinitionDesignationComponent ds : cc.getDesignation()) {
-      opContext.deadCheck();
+      opContext.deadCheck("validateCode1 "+ds.toString());
       if (isOkLanguage(ds.getLanguage())) {
         b.append("'"+ds.getValue()+"' ("+ds.getLanguage()+")");
         if (code.getDisplay().equalsIgnoreCase(ds.getValue())) {
@@ -947,7 +952,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
           }
         }
         for (ConceptReferenceDesignationComponent ds : vs.getCc().getDesignation()) {
-          opContext.deadCheck();
+          opContext.deadCheck("validateCode2 "+ds.toString());
           if (isOkLanguage(ds.getLanguage())) {
             b.append("'"+ds.getValue()+"'");
             if (code.getDisplay().equalsIgnoreCase(ds.getValue())) {
@@ -1052,7 +1057,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
       return null;
     // if it has an expansion
     for (ValueSetExpansionContainsComponent exp : valueset.getExpansion().getContains()) {
-      opContext.deadCheck();
+      opContext.deadCheck("findValueSetRef "+exp.toString());
       if (system.equals(exp.getSystem()) && code.equals(exp.getCode())) {
         ConceptReferenceComponent cc = new ConceptReferenceComponent();
         cc.setDisplay(exp.getDisplay());
@@ -1091,7 +1096,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
   }
 
   private ConceptDefinitionComponent findCodeInConcept(ConceptDefinitionComponent concept, String code, boolean caseSensitive, AlternateCodesProcessingRules altCodeRules) {
-    opContext.deadCheck();
+    opContext.deadCheck("findCodeInConcept: "+code.toString()+", "+concept.toString());
     if (code.equals(concept.getCode())) {
       return concept;
     }
@@ -1164,7 +1169,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
 
       int i = 0;
       for (ConceptSetComponent vsi : valueset.getCompose().getInclude()) {
-        opContext.deadCheck();
+        opContext.deadCheck("scanForCodeInValueSet: "+code.toString());
         if (scanForCodeInValueSetInclude(code, sys, problems, i, vsi)) {
           return true;
         }
@@ -1284,7 +1289,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
    */
   private boolean checkSystems(List contains, String code, Set systems, List problems) {
     for (ValueSetExpansionContainsComponent c: contains) {
-      opContext.deadCheck();
+      opContext.deadCheck("checkSystems "+code.toString());
       if (c.getCode().equals(code)) {
         systems.add(c.getSystem());
       }
@@ -1298,7 +1303,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
     if (valueset == null) {
       return null;
     }
-    opContext.deadCheck();
+    opContext.deadCheck("codeInValueSet: "+system+"#"+code);
     checkCanonical(info.getIssues(), path, valueset, valueset);
     Boolean result = false;
     VersionInfo vi = new VersionInfo(this);
@@ -1333,7 +1338,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
   }
 
   private Boolean inComponent(String path, ConceptSetComponent vsi, int vsiIndex, String system, String version, String code, boolean only, ValidationProcessInfo info) throws FHIRException {
-    opContext.deadCheck();
+    opContext.deadCheck("inComponent "+vsiIndex);
     boolean ok = true;
     
     if (vsi.hasValueSet()) {
@@ -1382,6 +1387,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
         vs.setUrl(valueset.getUrl()+"--"+vsiIndex);
         vs.setVersion(valueset.getVersion());
         vs.getCompose().addInclude(vsi);
+        opContext.deadCheck("hit server "+vs.getVersionedUrl());
         ValidationResult res = context.validateCode(options.withNoClient(), new Coding(system, code, null), vs);
         if (res.getErrorClass() == TerminologyServiceErrorClass.UNKNOWN || res.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED || res.getErrorClass() == TerminologyServiceErrorClass.VALUESET_UNSUPPORTED) {
           if (info != null && res.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED) {
@@ -1391,16 +1397,20 @@ public class ValueSetValidator extends ValueSetProcessBase {
               info.addIssue(makeIssue(IssueSeverity.WARNING, IssueType.UNKNOWN, path, msg, OpIssueCode.NotFound, null));
               for (ConceptReferenceComponent cc : vsi.getConcept()) {
                 if (cc.getCode().equals(code)) {
+                  opContext.deadCheck("server true");
                   return true;
                 }
               }
             }
             info.setErr(TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED);
+            opContext.deadCheck("server codesystem unsupported");
             return null;
           }
+          opContext.deadCheck("server not found");
           return false;
         }
         if (res.getErrorClass() == TerminologyServiceErrorClass.NOSERVICE) {
+          opContext.deadCheck("server no server");
           throw new NoTerminologyServiceException();
         }
         return res.isOk();
@@ -1581,7 +1591,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
   }
 
   public boolean validateCodeInConceptList(String code, CodeSystem def, List list, AlternateCodesProcessingRules altCodeRules) {
-    opContext.deadCheck();
+    opContext.deadCheck("validateCodeInConceptList");
     if (def.hasUserData("tx.cs.special")) {
       return ((SpecialCodeSystem) def.getUserData("tx.cs.special")).findConcept(new Coding().setCode(code)) != null; 
     } else if (def.getCaseSensitive()) {

From 6289638833fdaf86643d985d42d6c24f6d93f37b Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Wed, 25 Sep 2024 05:16:02 -0400
Subject: [PATCH 55/68] fix npe in test cases

---
 .../org/hl7/fhir/validation/cli/services/ValidationService.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java
index c11060368..a764d18d8 100644
--- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java
+++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java
@@ -540,7 +540,7 @@ public class ValidationService {
       TerminologyCache cache = new TerminologyCache(new Object(), cliContext.getTxCache());
       validationEngine.getContext().initTxCache(cache);
     }
-    if (validationEngine.getContext().getTxCache().getFolder() == null) {
+    if (validationEngine.getContext().getTxCache() == null || validationEngine.getContext().getTxCache().getFolder() == null) {
       System.out.println("  No Terminology Cache");      
     } else {
       System.out.println("  Terminology Cache at "+validationEngine.getContext().getTxCache().getFolder());

From 7b0cf668ae90c52beabd17f205726c9dcc53e4ce Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Wed, 25 Sep 2024 10:08:38 -0400
Subject: [PATCH 56/68] Improved logging + fix failing test

---
 .../fhir/r5/context/BaseWorkerContext.java    |  1 +
 .../utilities/ValueSetProcessBase.java        |  8 +++++--
 .../validation/ValueSetValidator.java         | 21 ++++++-------------
 3 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
index 6676b62ae..4034cf79c 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
@@ -1303,6 +1303,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
       // ok, first we try to validate locally
       try {
         ValueSetValidator vsc = constructValueSetCheckerSimple(options, vs, ctxt);
+        vsc.getOpContext().note("Validate "+code.toString()+" @ "+path+" against "+vs.getVersionedUrl());
         vsc.setUnknownSystems(unknownSystems);
         vsc.setThrowToServer(options.isUseServer() && terminologyClientManager.hasClient());
         if (!ValueSetUtilities.isServerSide(code.getSystem())) {
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/ValueSetProcessBase.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/ValueSetProcessBase.java
index a547327d5..406127929 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/ValueSetProcessBase.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/ValueSetProcessBase.java
@@ -49,7 +49,7 @@ public class ValueSetProcessBase {
   protected IWorkerContext context;
   protected TerminologyOperationContext opContext;
   protected List requiredSupplements = new ArrayList<>();
-
+  
   protected ValueSetProcessBase(IWorkerContext context, TerminologyOperationContext opContext) {
     super();
     this.context = context;
@@ -229,7 +229,11 @@ public class ValueSetProcessBase {
       }
     }
   }
-            
+
+  public TerminologyOperationContext getOpContext() {
+    return opContext;
+  }
+
                          
   protected AlternateCodesProcessingRules altCodeParams = new AlternateCodesProcessingRules(false);
   protected AlternateCodesProcessingRules allAltCodes = new AlternateCodesProcessingRules(true);
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
index 159c7eb69..44e55cbc8 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java
@@ -433,7 +433,7 @@ public class ValueSetValidator extends ValueSetProcessBase {
   private int checkValueSetLoad(ConceptSetComponent inc, ValidationProcessInfo info) {
     int serverCount = 0;
     for (UriType uri : inc.getValueSet()) {
-      ValueSetValidator vsv = getVSVal(uri, info);
+      ValueSetValidator vsv = getVs(uri.getValue(), info);
       serverCount += vsv.getServerLoad(info);
     }
     CodeSystem cs = resolveCodeSystem(inc.getSystem(), inc.getVersion());
@@ -1345,19 +1345,19 @@ public class ValueSetValidator extends ValueSetProcessBase {
       if (isValueSetUnionImports()) {
         ok = false;
         for (UriType uri : vsi.getValueSet()) {
-          if (inImport(path, uri, system, version, code, info)) {
+          if (inImport(path, uri.getValue(), system, version, code, info)) {
             return true;
           }
         }
       } else {
-        Boolean bok = inImport(path, vsi.getValueSet().get(0), system, version, code, info);
+        Boolean bok = inImport(path, vsi.getValueSet().get(0).getValue(), system, version, code, info);
         if (bok == null) {
           return bok;
         }
         ok = bok;
         for (int i = 1; i < vsi.getValueSet().size(); i++) {
           UriType uri = vsi.getValueSet().get(i);
-          ok = ok && inImport(path, uri, system, version, code, info); 
+          ok = ok && inImport(path, uri.getValue(), system, version, code, info); 
         }
       }
     }
@@ -1633,18 +1633,9 @@ public class ValueSetValidator extends ValueSetProcessBase {
     inner.put(url, vsc);
     return vsc;
   }
-
-  private ValueSetValidator getVSVal(UriType uri, ValidationProcessInfo info) { 
-    ValueSetValidator vs = (ValueSetValidator) uri.getUserData("tx-fhir-cache");
-    if (vs == null) {
-      vs = getVs(uri.getValue(), info);
-      uri.setUserData("tx-fhir-cache", vs);
-    }
-    return vs;    
-  }
   
-  private Boolean inImport(String path, UriType uri, String system, String version, String code, ValidationProcessInfo info) throws FHIRException {
-    ValueSetValidator vs = getVSVal(uri, info);
+  private Boolean inImport(String path, String uri, String system, String version, String code, ValidationProcessInfo info) throws FHIRException {
+    ValueSetValidator vs = getVs(uri, info);
     if (vs == null) {
       return false;
     } else {

From e38f40b0de35e32bb36781b88f620b2dfe8c218b Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Wed, 25 Sep 2024 10:08:58 -0400
Subject: [PATCH 57/68] fix xml annotation suppression

---
 .../org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java
index e4c989f54..84d4ed31d 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java
@@ -75,14 +75,14 @@ public class XmlLocationAnnotator extends XMLFilterImpl  {
 
   @Override
   public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
-    if (!name.equals("http://javax.xml.xmlconstants/property/accessExternalDTD")) {
+    if (!name.equals("http://javax.xml.XMLConstants/property/accessExternalDTD")) {
       super.setProperty(name, value);
     }
   }
 
   @Override
   public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
-    if (!name.equals("http://javax.xml.xmlconstants/property/accessExternalDTD")) {
+    if (!name.equals("http://javax.xml.XMLConstants/property/accessExternalDTD")) {
       return null;
     } else {
       return super.getProperty(name);

From 8595178336afc3f79a2d13352621f1f7978ce20d Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Wed, 25 Sep 2024 10:21:57 -0400
Subject: [PATCH 58/68] fix for NPE

---
 .../main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
index 4034cf79c..94546e46c 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
@@ -1303,7 +1303,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
       // ok, first we try to validate locally
       try {
         ValueSetValidator vsc = constructValueSetCheckerSimple(options, vs, ctxt);
-        vsc.getOpContext().note("Validate "+code.toString()+" @ "+path+" against "+vs.getVersionedUrl());
+        vsc.getOpContext().note("Validate "+code.toString()+" @ "+path+" against "+(vs == null ? "null" : vs.getVersionedUrl()));
         vsc.setUnknownSystems(unknownSystems);
         vsc.setThrowToServer(options.isUseServer() && terminologyClientManager.hasClient());
         if (!ValueSetUtilities.isServerSide(code.getSystem())) {

From 213d8f25f8ec78a056ca70fed0d0101cce1773c4 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Wed, 25 Sep 2024 12:17:46 -0400
Subject: [PATCH 59/68] fix npe

---
 .../java/org/hl7/fhir/r5/context/BaseWorkerContextTests.java    | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/context/BaseWorkerContextTests.java b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/context/BaseWorkerContextTests.java
index 9d646387b..8c6e41fa0 100644
--- a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/context/BaseWorkerContextTests.java
+++ b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/context/BaseWorkerContextTests.java
@@ -13,6 +13,7 @@ import org.hl7.fhir.r5.utils.validation.IResourceValidator;
 import org.hl7.fhir.r5.utils.validation.ValidationContextCarrier;
 import org.hl7.fhir.utilities.FhirPublication;
 import org.hl7.fhir.utilities.ToolingClientLogger;
+import org.hl7.fhir.utilities.Utilities;
 import org.hl7.fhir.utilities.npm.BasePackageCacheManager;
 import org.hl7.fhir.utilities.npm.NpmPackage;
 import org.hl7.fhir.utilities.validation.ValidationMessage;
@@ -341,6 +342,7 @@ public class BaseWorkerContextTests {
   public void testValidateCodingWithValueSetChecker() throws IOException {
     ValidationOptions validationOptions = new ValidationOptions(FhirPublication.R5).withGuessSystem().withVersionFlexible(false);
     ValueSet valueSet = new ValueSet();
+    valueSet.setUrl(Utilities.makeUuidUrn());
     Coding coding = new Coding();
 
     Mockito.doReturn(cacheToken).when(terminologyCache).generateValidationToken(validationOptions, coding, valueSet, expParameters);

From fc5c54bcc2432d4b1775261ca4929efe0ac62cb1 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Wed, 25 Sep 2024 13:03:39 -0400
Subject: [PATCH 60/68] fix npe in test case

---
 .../java/org/hl7/fhir/r5/context/BaseWorkerContext.java     | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
index 94546e46c..10421cf48 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
@@ -1303,7 +1303,9 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
       // ok, first we try to validate locally
       try {
         ValueSetValidator vsc = constructValueSetCheckerSimple(options, vs, ctxt);
-        vsc.getOpContext().note("Validate "+code.toString()+" @ "+path+" against "+(vs == null ? "null" : vs.getVersionedUrl()));
+        if (vsc.getOpContext() != null) {
+          vsc.getOpContext().note("Validate "+code.toString()+" @ "+path+" against "+(vs == null ? "null" : vs.getVersionedUrl()));
+        }
         vsc.setUnknownSystems(unknownSystems);
         vsc.setThrowToServer(options.isUseServer() && terminologyClientManager.hasClient());
         if (!ValueSetUtilities.isServerSide(code.getSystem())) {
@@ -1329,7 +1331,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
         issues.add(iss);
         return new ValidationResult(IssueSeverity.FATAL, e.getMessage(), e.getError(), issues);
       } catch (Exception e) {
-//        e.printStackTrace();
+        e.printStackTrace();
         localError = e.getMessage();
       }
     }

From 46f5673d34ccdfcd2e72719dcfdd2a94ee3ec466 Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Wed, 25 Sep 2024 15:32:43 -0400
Subject: [PATCH 61/68] release notes

---
 RELEASE_NOTES.md | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 7b06c6ab5..ba66022c7 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,7 +1,18 @@
 ## Validator Changes
 
-* no changes
+* Validator supports R6 from now on (using last stable release)
+* Set default language to tag not display
+* Handle tx server issues better
+* Do not use server piecemeal when validating complex value sets
+* Add support for -txCache parameter
 
 ## Other code changes
 
-* no changes
\ No newline at end of file
+* Add support for R6 to R4 version enumeration
+* Fix SCT link to include version and point to the right place
+* Add response time to tx log
+* Allow for code to turn off use of cache-id on tx interface (for debugging)
+* Support n/a for tx cache folder
+* Update tx cache for tests
+* Add more logging for too costly validation
+* Fix xml annotation suppression

From eeb92b069ad5125f1b45e6c85f05ad0eadeb2eb1 Mon Sep 17 00:00:00 2001
From: dotasek 
Date: Wed, 25 Sep 2024 15:48:13 -0400
Subject: [PATCH 62/68] Bump test cases for release

---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 548747036..eac9daa60 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
         1.26.0
         32.0.1-jre
         6.4.1
-        1.5.24-SNAPSHOT
+        1.5.24
         2.17.0
         5.9.2
         1.8.2

From 569fe4b697b19234d1be3a5b4ce4f5dafaedfb46 Mon Sep 17 00:00:00 2001
From: markiantorno 
Date: Wed, 25 Sep 2024 21:01:00 +0000
Subject: [PATCH 63/68] Release: v6.3.28 ## Validator Changes

* Validator supports R6 from now on (using last stable release)
* Set default language to tag not display
* Handle tx server issues better
* Do not use server piecemeal when validating complex value sets
* Add support for -txCache parameter

## Other code changes

* Add support for R6 to R4 version enumeration
* Fix SCT link to include version and point to the right place
* Add response time to tx log
* Allow for code to turn off use of cache-id on tx interface (for debugging)
* Support n/a for tx cache folder
* Update tx cache for tests
* Add more logging for too costly validation
* Fix xml annotation suppression
***NO_CI***
---
 org.hl7.fhir.convertors/pom.xml     | 2 +-
 org.hl7.fhir.dstu2/pom.xml          | 2 +-
 org.hl7.fhir.dstu2016may/pom.xml    | 2 +-
 org.hl7.fhir.dstu3/pom.xml          | 2 +-
 org.hl7.fhir.r4/pom.xml             | 2 +-
 org.hl7.fhir.r4b/pom.xml            | 2 +-
 org.hl7.fhir.r5/pom.xml             | 2 +-
 org.hl7.fhir.report/pom.xml         | 2 +-
 org.hl7.fhir.utilities/pom.xml      | 2 +-
 org.hl7.fhir.validation.cli/pom.xml | 2 +-
 org.hl7.fhir.validation/pom.xml     | 2 +-
 pom.xml                             | 2 +-
 12 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml
index 59d52ca35..317802d58 100644
--- a/org.hl7.fhir.convertors/pom.xml
+++ b/org.hl7.fhir.convertors/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28-SNAPSHOT
+        6.3.28
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml
index 0eb500312..165f8bce5 100644
--- a/org.hl7.fhir.dstu2/pom.xml
+++ b/org.hl7.fhir.dstu2/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28-SNAPSHOT
+		6.3.28
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml
index 78b815de9..548071b8d 100644
--- a/org.hl7.fhir.dstu2016may/pom.xml
+++ b/org.hl7.fhir.dstu2016may/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28-SNAPSHOT
+		6.3.28
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml
index f84e0d63c..7df7e03d5 100644
--- a/org.hl7.fhir.dstu3/pom.xml
+++ b/org.hl7.fhir.dstu3/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28-SNAPSHOT
+        6.3.28
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml
index 79b3a1c7b..f64a44b5c 100644
--- a/org.hl7.fhir.r4/pom.xml
+++ b/org.hl7.fhir.r4/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28-SNAPSHOT
+		6.3.28
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml
index 2d0073050..dedacc224 100644
--- a/org.hl7.fhir.r4b/pom.xml
+++ b/org.hl7.fhir.r4b/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28-SNAPSHOT
+		6.3.28
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml
index c4b4f449b..6dffa79fd 100644
--- a/org.hl7.fhir.r5/pom.xml
+++ b/org.hl7.fhir.r5/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28-SNAPSHOT
+		6.3.28
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml
index df558e2dd..2c3591a9d 100644
--- a/org.hl7.fhir.report/pom.xml
+++ b/org.hl7.fhir.report/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28-SNAPSHOT
+        6.3.28
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml
index 45a2fe224..49f5f6e5a 100644
--- a/org.hl7.fhir.utilities/pom.xml
+++ b/org.hl7.fhir.utilities/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28-SNAPSHOT
+        6.3.28
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml
index 2caf452ba..54760ca20 100644
--- a/org.hl7.fhir.validation.cli/pom.xml
+++ b/org.hl7.fhir.validation.cli/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28-SNAPSHOT
+        6.3.28
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml
index d6c453df3..0e395b9aa 100644
--- a/org.hl7.fhir.validation/pom.xml
+++ b/org.hl7.fhir.validation/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28-SNAPSHOT
+        6.3.28
         ../pom.xml
     
 
diff --git a/pom.xml b/pom.xml
index eac9daa60..a24221642 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
     HAPI FHIR
     -->
     org.hl7.fhir.core
-    6.3.28-SNAPSHOT
+    6.3.28
     pom
 
     

From 8358354d2fd7e8d06bb5304f0f7151b90c9f5ca3 Mon Sep 17 00:00:00 2001
From: markiantorno 
Date: Wed, 25 Sep 2024 21:46:09 +0000
Subject: [PATCH 64/68] Updating version to: 6.3.29-SNAPSHOT and incrementing
 test cases dependency.

---
 RELEASE_NOTES.md                    | 15 ++-------------
 org.hl7.fhir.convertors/pom.xml     |  2 +-
 org.hl7.fhir.dstu2/pom.xml          |  2 +-
 org.hl7.fhir.dstu2016may/pom.xml    |  2 +-
 org.hl7.fhir.dstu3/pom.xml          |  2 +-
 org.hl7.fhir.r4/pom.xml             |  2 +-
 org.hl7.fhir.r4b/pom.xml            |  2 +-
 org.hl7.fhir.r5/pom.xml             |  2 +-
 org.hl7.fhir.report/pom.xml         |  2 +-
 org.hl7.fhir.utilities/pom.xml      |  2 +-
 org.hl7.fhir.validation.cli/pom.xml |  2 +-
 org.hl7.fhir.validation/pom.xml     |  2 +-
 pom.xml                             |  2 +-
 13 files changed, 14 insertions(+), 25 deletions(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index ba66022c7..7b06c6ab5 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,18 +1,7 @@
 ## Validator Changes
 
-* Validator supports R6 from now on (using last stable release)
-* Set default language to tag not display
-* Handle tx server issues better
-* Do not use server piecemeal when validating complex value sets
-* Add support for -txCache parameter
+* no changes
 
 ## Other code changes
 
-* Add support for R6 to R4 version enumeration
-* Fix SCT link to include version and point to the right place
-* Add response time to tx log
-* Allow for code to turn off use of cache-id on tx interface (for debugging)
-* Support n/a for tx cache folder
-* Update tx cache for tests
-* Add more logging for too costly validation
-* Fix xml annotation suppression
+* no changes
\ No newline at end of file
diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml
index 317802d58..2ba3c4421 100644
--- a/org.hl7.fhir.convertors/pom.xml
+++ b/org.hl7.fhir.convertors/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28
+        6.3.29-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml
index 165f8bce5..00ff64f65 100644
--- a/org.hl7.fhir.dstu2/pom.xml
+++ b/org.hl7.fhir.dstu2/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28
+		6.3.29-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml
index 548071b8d..c35c01e82 100644
--- a/org.hl7.fhir.dstu2016may/pom.xml
+++ b/org.hl7.fhir.dstu2016may/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28
+		6.3.29-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml
index 7df7e03d5..33f47bef6 100644
--- a/org.hl7.fhir.dstu3/pom.xml
+++ b/org.hl7.fhir.dstu3/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28
+        6.3.29-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml
index f64a44b5c..699045125 100644
--- a/org.hl7.fhir.r4/pom.xml
+++ b/org.hl7.fhir.r4/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28
+		6.3.29-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml
index dedacc224..4ee0cae0d 100644
--- a/org.hl7.fhir.r4b/pom.xml
+++ b/org.hl7.fhir.r4b/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28
+		6.3.29-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml
index 6dffa79fd..4d97cafcf 100644
--- a/org.hl7.fhir.r5/pom.xml
+++ b/org.hl7.fhir.r5/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.28
+		6.3.29-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml
index 2c3591a9d..07459126b 100644
--- a/org.hl7.fhir.report/pom.xml
+++ b/org.hl7.fhir.report/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28
+        6.3.29-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml
index 49f5f6e5a..a5c1a0ecb 100644
--- a/org.hl7.fhir.utilities/pom.xml
+++ b/org.hl7.fhir.utilities/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28
+        6.3.29-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml
index 54760ca20..9ea02a917 100644
--- a/org.hl7.fhir.validation.cli/pom.xml
+++ b/org.hl7.fhir.validation.cli/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28
+        6.3.29-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml
index 0e395b9aa..24de782d0 100644
--- a/org.hl7.fhir.validation/pom.xml
+++ b/org.hl7.fhir.validation/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.28
+        6.3.29-SNAPSHOT
         ../pom.xml
     
 
diff --git a/pom.xml b/pom.xml
index a24221642..760f9d468 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
     HAPI FHIR
     -->
     org.hl7.fhir.core
-    6.3.28
+    6.3.29-SNAPSHOT
     pom
 
     

From bd53f7c011812a98e8d4fa3b5e1ae1760023da7b Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Thu, 26 Sep 2024 07:08:47 -0400
Subject: [PATCH 65/68] remove spurious logging statement

---
 .../main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
index 10421cf48..89dde24e0 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java
@@ -1331,7 +1331,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
         issues.add(iss);
         return new ValidationResult(IssueSeverity.FATAL, e.getMessage(), e.getError(), issues);
       } catch (Exception e) {
-        e.printStackTrace();
+//        e.printStackTrace();
         localError = e.getMessage();
       }
     }

From 10921bef1f418caa6b9a3d106e5c5a1f51e4364b Mon Sep 17 00:00:00 2001
From: Grahame Grieve 
Date: Thu, 26 Sep 2024 07:11:28 -0400
Subject: [PATCH 66/68] release notes

---
 RELEASE_NOTES.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 7b06c6ab5..80c06e825 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,6 +1,6 @@
 ## Validator Changes
 
-* no changes
+* remove spurious logging statement
 
 ## Other code changes
 

From 53ec745184758f4675437af91d216ece5587961e Mon Sep 17 00:00:00 2001
From: markiantorno 
Date: Thu, 26 Sep 2024 11:44:41 +0000
Subject: [PATCH 67/68] Release: v6.3.29 ## Validator Changes

* remove spurious logging statement

## Other code changes

* no changes
***NO_CI***
---
 org.hl7.fhir.convertors/pom.xml     | 2 +-
 org.hl7.fhir.dstu2/pom.xml          | 2 +-
 org.hl7.fhir.dstu2016may/pom.xml    | 2 +-
 org.hl7.fhir.dstu3/pom.xml          | 2 +-
 org.hl7.fhir.r4/pom.xml             | 2 +-
 org.hl7.fhir.r4b/pom.xml            | 2 +-
 org.hl7.fhir.r5/pom.xml             | 2 +-
 org.hl7.fhir.report/pom.xml         | 2 +-
 org.hl7.fhir.utilities/pom.xml      | 2 +-
 org.hl7.fhir.validation.cli/pom.xml | 2 +-
 org.hl7.fhir.validation/pom.xml     | 2 +-
 pom.xml                             | 2 +-
 12 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml
index 2ba3c4421..eccac766b 100644
--- a/org.hl7.fhir.convertors/pom.xml
+++ b/org.hl7.fhir.convertors/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29-SNAPSHOT
+        6.3.29
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml
index 00ff64f65..d5d618b53 100644
--- a/org.hl7.fhir.dstu2/pom.xml
+++ b/org.hl7.fhir.dstu2/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29-SNAPSHOT
+		6.3.29
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml
index c35c01e82..a0e8b116d 100644
--- a/org.hl7.fhir.dstu2016may/pom.xml
+++ b/org.hl7.fhir.dstu2016may/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29-SNAPSHOT
+		6.3.29
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml
index 33f47bef6..eb742cd58 100644
--- a/org.hl7.fhir.dstu3/pom.xml
+++ b/org.hl7.fhir.dstu3/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29-SNAPSHOT
+        6.3.29
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml
index 699045125..9c7e04fed 100644
--- a/org.hl7.fhir.r4/pom.xml
+++ b/org.hl7.fhir.r4/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29-SNAPSHOT
+		6.3.29
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml
index 4ee0cae0d..d5b78c5d3 100644
--- a/org.hl7.fhir.r4b/pom.xml
+++ b/org.hl7.fhir.r4b/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29-SNAPSHOT
+		6.3.29
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml
index 4d97cafcf..41f068f29 100644
--- a/org.hl7.fhir.r5/pom.xml
+++ b/org.hl7.fhir.r5/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29-SNAPSHOT
+		6.3.29
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml
index 07459126b..cecfaab7c 100644
--- a/org.hl7.fhir.report/pom.xml
+++ b/org.hl7.fhir.report/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29-SNAPSHOT
+        6.3.29
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml
index a5c1a0ecb..16b0bb055 100644
--- a/org.hl7.fhir.utilities/pom.xml
+++ b/org.hl7.fhir.utilities/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29-SNAPSHOT
+        6.3.29
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml
index 9ea02a917..7b8c326ec 100644
--- a/org.hl7.fhir.validation.cli/pom.xml
+++ b/org.hl7.fhir.validation.cli/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29-SNAPSHOT
+        6.3.29
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml
index 24de782d0..5c8e632b2 100644
--- a/org.hl7.fhir.validation/pom.xml
+++ b/org.hl7.fhir.validation/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29-SNAPSHOT
+        6.3.29
         ../pom.xml
     
 
diff --git a/pom.xml b/pom.xml
index 760f9d468..561f2402a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
     HAPI FHIR
     -->
     org.hl7.fhir.core
-    6.3.29-SNAPSHOT
+    6.3.29
     pom
 
     

From e8a0bba07237a203539c59721a8ade1621a15146 Mon Sep 17 00:00:00 2001
From: markiantorno 
Date: Thu, 26 Sep 2024 12:30:18 +0000
Subject: [PATCH 68/68] Updating version to: 6.3.30-SNAPSHOT and incrementing
 test cases dependency.

---
 RELEASE_NOTES.md                    | 2 +-
 org.hl7.fhir.convertors/pom.xml     | 2 +-
 org.hl7.fhir.dstu2/pom.xml          | 2 +-
 org.hl7.fhir.dstu2016may/pom.xml    | 2 +-
 org.hl7.fhir.dstu3/pom.xml          | 2 +-
 org.hl7.fhir.r4/pom.xml             | 2 +-
 org.hl7.fhir.r4b/pom.xml            | 2 +-
 org.hl7.fhir.r5/pom.xml             | 2 +-
 org.hl7.fhir.report/pom.xml         | 2 +-
 org.hl7.fhir.utilities/pom.xml      | 2 +-
 org.hl7.fhir.validation.cli/pom.xml | 2 +-
 org.hl7.fhir.validation/pom.xml     | 2 +-
 pom.xml                             | 2 +-
 13 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 80c06e825..7b06c6ab5 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,6 +1,6 @@
 ## Validator Changes
 
-* remove spurious logging statement
+* no changes
 
 ## Other code changes
 
diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml
index eccac766b..1c359937b 100644
--- a/org.hl7.fhir.convertors/pom.xml
+++ b/org.hl7.fhir.convertors/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29
+        6.3.30-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml
index d5d618b53..577ce48a6 100644
--- a/org.hl7.fhir.dstu2/pom.xml
+++ b/org.hl7.fhir.dstu2/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29
+		6.3.30-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml
index a0e8b116d..1e7c95128 100644
--- a/org.hl7.fhir.dstu2016may/pom.xml
+++ b/org.hl7.fhir.dstu2016may/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29
+		6.3.30-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml
index eb742cd58..d89f9ce2d 100644
--- a/org.hl7.fhir.dstu3/pom.xml
+++ b/org.hl7.fhir.dstu3/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29
+        6.3.30-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml
index 9c7e04fed..13ed8ea66 100644
--- a/org.hl7.fhir.r4/pom.xml
+++ b/org.hl7.fhir.r4/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29
+		6.3.30-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml
index d5b78c5d3..9005ad3e7 100644
--- a/org.hl7.fhir.r4b/pom.xml
+++ b/org.hl7.fhir.r4b/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29
+		6.3.30-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml
index 41f068f29..59d59a839 100644
--- a/org.hl7.fhir.r5/pom.xml
+++ b/org.hl7.fhir.r5/pom.xml
@@ -5,7 +5,7 @@
 	
 		ca.uhn.hapi.fhir
 		org.hl7.fhir.core
-		6.3.29
+		6.3.30-SNAPSHOT
 		../pom.xml
 	
 
diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml
index cecfaab7c..a497b0985 100644
--- a/org.hl7.fhir.report/pom.xml
+++ b/org.hl7.fhir.report/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29
+        6.3.30-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml
index 16b0bb055..1ec2a2e66 100644
--- a/org.hl7.fhir.utilities/pom.xml
+++ b/org.hl7.fhir.utilities/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29
+        6.3.30-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml
index 7b8c326ec..d802a4672 100644
--- a/org.hl7.fhir.validation.cli/pom.xml
+++ b/org.hl7.fhir.validation.cli/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29
+        6.3.30-SNAPSHOT
         ../pom.xml
     
 
diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml
index 5c8e632b2..92de2268c 100644
--- a/org.hl7.fhir.validation/pom.xml
+++ b/org.hl7.fhir.validation/pom.xml
@@ -5,7 +5,7 @@
     
         ca.uhn.hapi.fhir
         org.hl7.fhir.core
-        6.3.29
+        6.3.30-SNAPSHOT
         ../pom.xml
     
 
diff --git a/pom.xml b/pom.xml
index 561f2402a..e3fa0de1b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
     HAPI FHIR
     -->
     org.hl7.fhir.core
-    6.3.29
+    6.3.30-SNAPSHOT
     pom
 
     

- * - * @param path The path to create the lockfile in - * @param lockFileName The name of the lockfile - * @param seconds The number of seconds to wait before deleting the lockfile - * @throws InterruptedException If the thread is interrupted while waiting - * @throws IOException If there is an error accessing the file system - */ - /* TODO Eventually, this logic should exist in a Lockfile class so that it isn't duplicated between the main code and - the test code. - */ - private static void lockWaitAndDelete(String path, String lockFileName, int seconds) throws InterruptedException, IOException { - - File file = Paths.get(path,lockFileName).toFile(); - - try (FileChannel channel = new RandomAccessFile(file.getAbsolutePath(), "rw").getChannel()) { - FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, false); - if (fileLock != null) { - final ByteBuffer buff = ByteBuffer.wrap("Hello world".getBytes(StandardCharsets.UTF_8)); - channel.write(buff); - System.out.println("File "+lockFileName+" is locked. Waiting for " + seconds + " seconds to release. "); - Thread.sleep(seconds * 1000L); - fileLock.release(); - System.out.println(System.currentTimeMillis()); - System.out.println("File "+lockFileName+" is released."); - - channel.close(); - }}finally { - if (file.exists()) { - file.delete(); - } + try { + monitor.start(); + } catch (Exception e) { + throw new RuntimeException(e); } + latch.await(10, TimeUnit.SECONDS); + try { + monitor.stop(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + if (!Files.exists(Paths.get(path, lockFileName))) { + throw new TimeoutException("Lock file not created within 10 seconds"); + } + } + + } From 0fd25a6a986542130b08b4ead50db4fd90b3109d Mon Sep 17 00:00:00 2001 From: dotasek Date: Wed, 18 Sep 2024 19:23:00 -0400 Subject: [PATCH 26/68] Move file exists logic into onStart + move file delete before unlock --- .../FilesystemPackageCacheManagerLocks.java | 5 ++- .../FilesystemPackageManagerLockTests.java | 11 ----- .../utilities/npm/LockfileTestUtility.java | 40 +++++++++++-------- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java index 582596420..ad9d54380 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java @@ -261,11 +261,12 @@ public class FilesystemPackageCacheManagerLocks { try { result = function.get(); } finally { - fileLock.release(); - channel.close(); if (!lockFile.delete()) { lockFile.deleteOnExit(); } + fileLock.release(); + channel.close(); + lock.writeLock().unlock(); cacheLock.getLock().writeLock().unlock(); } diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java index 49eb750e8..8fa981d88 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/FilesystemPackageManagerLockTests.java @@ -218,17 +218,6 @@ public class FilesystemPackageManagerLockTests { lockThread.join(); } - @Test - public void apacheFileAlterationMonitorTest() { - - // Use Apache FileAlterationMonitor to monitor the cache directory for file deletions - // and create a lock file in a separate thread - - // Create a lock file in a separate thread - - - - } @Test public void testReadWhenLockFileIsDeleted() throws InterruptedException, TimeoutException, IOException { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java index 44949ac6e..bd2c2c4e4 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java @@ -29,14 +29,20 @@ public class LockfileTestUtility { * @throws TimeoutException If the lock file is not created within 10 seconds */ public static void waitForLockfileCreation(String path, String lockFileName) throws InterruptedException, TimeoutException { - if (Files.exists(Paths.get(path, lockFileName))) { - return; - } + CountDownLatch latch = new CountDownLatch(1); FileAlterationMonitor monitor = new FileAlterationMonitor(100); FileAlterationObserver observer = new FileAlterationObserver(path); observer.addListener(new FileAlterationListenerAdaptor(){ + + @Override + public void onStart(FileAlterationObserver observer) { + if (Files.exists(Paths.get(path, lockFileName))) { + latch.countDown(); + } + } + @Override public void onFileCreate(File file) { System.out.println("File created: " + file.getName()); @@ -45,21 +51,21 @@ public class LockfileTestUtility { }); monitor.addObserver(observer); - try { - monitor.start(); - } catch (Exception e) { - throw new RuntimeException(e); - } - latch.await(10, TimeUnit.SECONDS); - try { - monitor.stop(); - } catch (Exception e) { - throw new RuntimeException(e); - } + try { + monitor.start(); + } catch (Exception e) { + throw new RuntimeException(e); + } + boolean success = latch.await(10, TimeUnit.SECONDS); + try { + monitor.stop(); + } catch (Exception e) { + throw new RuntimeException(e); + } - if (!Files.exists(Paths.get(path, lockFileName))) { - throw new TimeoutException("Lock file not created within 10 seconds"); - } + if (!success) { + throw new TimeoutException("Timed out waiting for lock file creation: " + lockFileName); + } } From cce4d108ceeed22296f085d526ea49700e0a3eb8 Mon Sep 17 00:00:00 2001 From: dotasek Date: Thu, 19 Sep 2024 10:48:30 -0400 Subject: [PATCH 27/68] Fix classpath on windows + workaround for edge case on lock file --- .../hl7/fhir/utilities/npm/LockfileTestProcessUtility.java | 2 +- .../java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java index 0e8f3f73d..76792c5fb 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java @@ -62,7 +62,7 @@ public class LockfileTestProcessUtility { */ public static Thread lockWaitAndDeleteInNewProcess(String path, String lockFileName, int seconds) { Thread t = new Thread(() -> { - ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes:.", LockfileTestProcessUtility.class.getName(), path, lockFileName, Integer.toString(seconds)); + ProcessBuilder processBuilder = new ProcessBuilder("java", "-cp", "target/test-classes", LockfileTestProcessUtility.class.getName(), path, lockFileName, Integer.toString(seconds)); try { Process process = processBuilder.start(); process.getErrorStream().transferTo(System.err); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java index bd2c2c4e4..e7badf2f0 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java @@ -66,6 +66,11 @@ public class LockfileTestUtility { if (!success) { throw new TimeoutException("Timed out waiting for lock file creation: " + lockFileName); } + // TODO This is a workaround for an edge condition that shows up with testing, where the lock is not reflected in + // the file system immediately. It is unlikely to appear in production environments, but should it occur, it will + // result in a lock file being erroneously reported as not having an owning process, and will cause a package to + // fail to be loaded from that cache until the lock is cleaned up by cache initialization. + Thread.sleep(100); } From c81c631ae8c5c479e366b365326714bc85a95333 Mon Sep 17 00:00:00 2001 From: dotasek Date: Thu, 19 Sep 2024 12:22:29 -0400 Subject: [PATCH 28/68] Use rename to bypass windows lockfile issue --- .../npm/FilesystemPackageCacheManagerLocks.java | 8 ++++++-- .../utilities/npm/LockfileTestProcessUtility.java | 15 +++++++++------ .../fhir/utilities/npm/LockfileTestUtility.java | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java index ad9d54380..def6e8cb7 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java @@ -261,11 +261,15 @@ public class FilesystemPackageCacheManagerLocks { try { result = function.get(); } finally { + + lockFile.renameTo(File.createTempFile(lockFile.getName(), ".lock-renamed")); + + fileLock.release(); + channel.close(); + if (!lockFile.delete()) { lockFile.deleteOnExit(); } - fileLock.release(); - channel.close(); lock.writeLock().unlock(); cacheLock.getLock().writeLock().unlock(); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java index 76792c5fb..63e10bfd9 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java @@ -93,24 +93,27 @@ public class LockfileTestProcessUtility { */ private static void lockWaitAndDelete(String path, String lockFileName, int seconds) throws InterruptedException, IOException { - File file = Paths.get(path,lockFileName).toFile(); + File lockFile = Paths.get(path,lockFileName).toFile(); - try (FileChannel channel = new RandomAccessFile(file.getAbsolutePath(), "rw").getChannel()) { + try (FileChannel channel = new RandomAccessFile(lockFile.getAbsolutePath(), "rw").getChannel()) { FileLock fileLock = channel.tryLock(0, Long.MAX_VALUE, false); if (fileLock != null) { final ByteBuffer buff = ByteBuffer.wrap("Hello world".getBytes(StandardCharsets.UTF_8)); channel.write(buff); System.out.println("File "+lockFileName+" is locked. Waiting for " + seconds + " seconds to release. "); Thread.sleep(seconds * 1000L); - file.delete(); + + lockFile.renameTo(File.createTempFile(lockFile.getName(), ".lock-renamed")); + fileLock.release(); + channel.close(); System.out.println(System.currentTimeMillis()); System.out.println("File "+lockFileName+" is released."); - channel.close(); + lockFile.delete(); }}finally { - if (file.exists()) { - file.delete(); + if (lockFile.exists()) { + lockFile.delete(); } } } diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java index e7badf2f0..5309d5e19 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java @@ -70,7 +70,7 @@ public class LockfileTestUtility { // the file system immediately. It is unlikely to appear in production environments, but should it occur, it will // result in a lock file being erroneously reported as not having an owning process, and will cause a package to // fail to be loaded from that cache until the lock is cleaned up by cache initialization. - Thread.sleep(100); + //Thread.sleep(100); } From 356a70a8454f28c69cef4560f4953ffb16cd81d8 Mon Sep 17 00:00:00 2001 From: dotasek Date: Thu, 19 Sep 2024 12:53:17 -0400 Subject: [PATCH 29/68] Re-introduce sleep to lockfile creation wait. --- .../java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java index 5309d5e19..e7badf2f0 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java @@ -70,7 +70,7 @@ public class LockfileTestUtility { // the file system immediately. It is unlikely to appear in production environments, but should it occur, it will // result in a lock file being erroneously reported as not having an owning process, and will cause a package to // fail to be loaded from that cache until the lock is cleaned up by cache initialization. - //Thread.sleep(100); + Thread.sleep(100); } From d57008510c8ca3bd821849d51f4132d7beeaaf12 Mon Sep 17 00:00:00 2001 From: dotasek Date: Thu, 19 Sep 2024 13:31:38 -0400 Subject: [PATCH 30/68] Use ManagedFileAccess for temp file creation --- .../utilities/npm/FilesystemPackageCacheManagerLocks.java | 3 ++- .../hl7/fhir/utilities/npm/LockfileTestProcessUtility.java | 4 +++- .../java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java index def6e8cb7..b32dda96d 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManagerLocks.java @@ -3,6 +3,7 @@ package org.hl7.fhir.utilities.npm; import lombok.Getter; import lombok.With; import org.hl7.fhir.utilities.Utilities; +import org.hl7.fhir.utilities.filesystem.ManagedFileAccess; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -262,7 +263,7 @@ public class FilesystemPackageCacheManagerLocks { result = function.get(); } finally { - lockFile.renameTo(File.createTempFile(lockFile.getName(), ".lock-renamed")); + lockFile.renameTo(ManagedFileAccess.file(File.createTempFile(lockFile.getName(), ".lock-renamed").getAbsolutePath())); fileLock.release(); channel.close(); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java index 63e10bfd9..d8f054f3d 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestProcessUtility.java @@ -1,5 +1,7 @@ package org.hl7.fhir.utilities.npm; +import org.hl7.fhir.utilities.filesystem.ManagedFileAccess; + import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; @@ -103,7 +105,7 @@ public class LockfileTestProcessUtility { System.out.println("File "+lockFileName+" is locked. Waiting for " + seconds + " seconds to release. "); Thread.sleep(seconds * 1000L); - lockFile.renameTo(File.createTempFile(lockFile.getName(), ".lock-renamed")); + lockFile.renameTo(ManagedFileAccess.file(File.createTempFile(lockFile.getName(), ".lock-renamed").getAbsolutePath())); fileLock.release(); channel.close(); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java index e7badf2f0..250e7bcb1 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/LockfileTestUtility.java @@ -67,7 +67,7 @@ public class LockfileTestUtility { throw new TimeoutException("Timed out waiting for lock file creation: " + lockFileName); } // TODO This is a workaround for an edge condition that shows up with testing, where the lock is not reflected in - // the file system immediately. It is unlikely to appear in production environments, but should it occur, it will + // the file system immediately. It is unlikely to appear in production environments. Should it occur, it will // result in a lock file being erroneously reported as not having an owning process, and will cause a package to // fail to be loaded from that cache until the lock is cleaned up by cache initialization. Thread.sleep(100); From 8cfcbf389e21619623fe84cc72d5fd021be415fe Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sat, 21 Sep 2024 00:35:01 -0400 Subject: [PATCH 31/68] Fix various issues rendering and validating additional bindings with usage contexts --- .../special40_50/ElementDefinition40_50.java | 13 +- .../conformance/profile/ProfileUtilities.java | 2 +- .../renderers/AdditionalBindingsRenderer.java | 25 +- .../hl7/fhir/r5/renderers/DataRenderer.java | 21 +- .../fhir/utilities/i18n/I18nConstants.java | 7 +- .../utilities/i18n/RenderingI18nContext.java | 1 + .../src/main/resources/Messages.properties | 7 +- .../resources/rendering-phrases.properties | 3 +- .../instance/InstanceValidator.java | 272 ++++++++++++++---- .../type/StructureDefinitionValidator.java | 117 +++++++- ...nitionadditional-bindings-profile-cs.cache | 42 +++ ...ystemSDOHCC-CodeSystemTemporaryCodes.cache | 83 ++++++ 12 files changed, 519 insertions(+), 74 deletions(-) create mode 100644 org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/testStructureDefinitionadditional-bindings-profile-cs.cache create mode 100644 org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/ussdoh-clinicalcareCodeSystemSDOHCC-CodeSystemTemporaryCodes.cache diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/datatypes40_50/special40_50/ElementDefinition40_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/datatypes40_50/special40_50/ElementDefinition40_50.java index f51e9f55f..8eb57d554 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/datatypes40_50/special40_50/ElementDefinition40_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/datatypes40_50/special40_50/ElementDefinition40_50.java @@ -25,8 +25,10 @@ import org.hl7.fhir.r4.model.StringType; import org.hl7.fhir.r5.model.CodeType; import org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingAdditionalComponent; import org.hl7.fhir.r5.model.UsageContext; +import org.hl7.fhir.r5.utils.ToolingExtensions; public class ElementDefinition40_50 { + public static org.hl7.fhir.r5.model.ElementDefinition convertElementDefinition(org.hl7.fhir.r4.model.ElementDefinition src) throws FHIRException { if (src == null) return null; org.hl7.fhir.r5.model.ElementDefinition tgt = new org.hl7.fhir.r5.model.ElementDefinition(); @@ -616,7 +618,7 @@ public class ElementDefinition40_50 { if (src == null) return null; org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent tgt = new org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent(); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt, - "http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.binding.additional"); + "http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.binding.additional", ToolingExtensions.EXT_BINDING_ADDITIONAL); if (src.hasStrength()) tgt.setStrengthElement(Enumerations40_50.convertBindingStrength(src.getStrengthElement())); if (src.hasDescription()) tgt.setDescriptionElement(String40_50.convertStringToMarkdown(src.getDescriptionElement())); if (src.hasValueSet()) tgt.setValueSetElement(Canonical40_50.convertCanonical(src.getValueSetElement())); @@ -624,6 +626,9 @@ public class ElementDefinition40_50 { for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl("http://hl7.org/fhir/5.0/StructureDefinition/extension-ElementDefinition.binding.additional")) { tgt.addAdditional(convertAdditional(ext)); } + for (org.hl7.fhir.r4.model.Extension ext : src.getExtensionsByUrl(ToolingExtensions.EXT_BINDING_ADDITIONAL)) { + tgt.addAdditional(convertAdditional(ext)); + } return tgt; } @@ -652,12 +657,12 @@ public class ElementDefinition40_50 { return tgt; } - private static Extension convertAdditional(ElementDefinitionBindingAdditionalComponent src) { + private static org.hl7.fhir.r4.model.Extension convertAdditional(ElementDefinitionBindingAdditionalComponent src) { if (src == null) return null; - Extension tgt = new Extension(); + org.hl7.fhir.r4.model.Extension tgt = new Extension(ToolingExtensions.EXT_BINDING_ADDITIONAL); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyElement(src, tgt); if (src.hasPurpose()) { - tgt.addExtension(new Extension("purpose", new CodeType(src.getPurposeElement().primitiveValue()))); + tgt.addExtension(new Extension("purpose", new org.hl7.fhir.r4.model.CodeType(src.getPurposeElement().primitiveValue()))); } if (src.hasValueSet()) { tgt.addExtension(new Extension("valueSet", Canonical40_50.convertCanonical(src.getValueSetElement()))); diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java index bc8d243a2..e8f3441b4 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java @@ -2923,7 +2923,7 @@ public class ProfileUtilities { private ElementDefinitionBindingAdditionalComponent getMatchingAdditionalBinding(ElementDefinitionBindingComponent nb,ElementDefinitionBindingAdditionalComponent ab) { for (ElementDefinitionBindingAdditionalComponent t : nb.getAdditional()) { - if (t.getValueSet() != null && t.getValueSet().equals(ab.getValueSet()) && t.getPurpose() == ab.getPurpose()) { + if (t.getValueSet() != null && t.getValueSet().equals(ab.getValueSet()) && t.getPurpose() == ab.getPurpose() && !ab.hasUsage()) { return t; } } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/AdditionalBindingsRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/AdditionalBindingsRenderer.java index a80990c4c..519489942 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/AdditionalBindingsRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/AdditionalBindingsRenderer.java @@ -36,7 +36,7 @@ public class AdditionalBindingsRenderer { private String valueSet; private String doco; private String docoShort; - private UsageContext usage; + private List usages = new ArrayList(); private boolean any = false; private boolean isUnchanged = false; private boolean matched = false; @@ -72,7 +72,7 @@ public class AdditionalBindingsRenderer { isUnchanged = isUnchanged && ((valueSet==null && compare.valueSet==null) || valueSet.equals(compare.valueSet)); isUnchanged = isUnchanged && ((doco==null && compare.doco==null) || doco.equals(compare.doco)); isUnchanged = isUnchanged && ((docoShort==null && compare.docoShort==null) || docoShort.equals(compare.docoShort)); - isUnchanged = isUnchanged && ((usage==null && compare.usage==null) || usage.equals(compare.usage)); + isUnchanged = isUnchanged && ((usages==null && compare.usages==null) || usages.equals(compare.usages)); return isUnchanged; } } @@ -174,8 +174,12 @@ public class AdditionalBindingsRenderer { abr.purpose = ext.getExtensionString("purpose"); abr.valueSet = ext.getExtensionString("valueSet"); abr.doco = ext.getExtensionString("documentation"); - abr.docoShort = ext.getExtensionString("shortDoco"); - abr.usage = (ext.hasExtension("usage")) && ext.getExtensionByUrl("usage").hasValueUsageContext() ? ext.getExtensionByUrl("usage").getValueUsageContext() : null; + abr.docoShort = ext.getExtensionString("shortDoco"); + for (Extension x : ext.getExtensionsByUrl("usage")) { + if (x.hasValueUsageContext()) { + abr.usages.add(x.getValueUsageContext()); + } + } abr.any = "any".equals(ext.getExtensionString("scope")); abr.isUnchanged = ext.hasUserData(ProfileUtilities.UD_DERIVATION_EQUALS); return abr; @@ -187,7 +191,7 @@ public class AdditionalBindingsRenderer { abr.valueSet = ab.getValueSet(); abr.doco = ab.getDocumentation(); abr.docoShort = ab.getShortDoco(); - abr.usage = ab.hasUsage() ? ab.getUsageFirstRep() : null; + abr.usages.addAll(ab.getUsage()); abr.any = ab.getAny(); abr.isUnchanged = ab.hasUserData(ProfileUtilities.UD_DERIVATION_EQUALS); return abr; @@ -220,7 +224,7 @@ public class AdditionalBindingsRenderer { boolean any = false; for (AdditionalBindingDetail binding : bindings) { doco = doco || binding.getDoco(fullDoco)!=null || (binding.compare!=null && binding.compare.getDoco(fullDoco)!=null); - usage = usage || binding.usage != null || (binding.compare!=null && binding.compare.usage!=null); + usage = usage || !binding.usages.isEmpty() || (binding.compare!=null && !binding.compare.usages.isEmpty()); any = any || binding.any || (binding.compare!=null && binding.compare.any); } @@ -283,9 +287,12 @@ public class AdditionalBindingsRenderer { renderPurpose(purpose, binding.compare.purpose); } if (usage) { - if (binding.usage != null) { - // TODO: This isn't rendered at all yet. Ideally, we want it to render with comparison... - new DataRenderer(context).renderBase(new RenderingStatus(), tr.td(), binding.usage); + if (!binding.usages.isEmpty()) { + XhtmlNode td = tr.td(); + for (UsageContext uc : binding.usages) { + td.sep(", "); + new DataRenderer(context).renderBase(new RenderingStatus(), td, uc); + } } else { tr.td(); } 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 ffb441b6d..4edaebc1f 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 @@ -1301,7 +1301,11 @@ public class DataRenderer extends Renderer implements CodeResolver { } } - protected void renderCoding(RenderingStatus status, XhtmlNode x, ResourceWrapper c) { + protected void renderCoding(RenderingStatus status, XhtmlNode x, ResourceWrapper c) { + renderCoding(status, x, c, true); + } + + protected void renderCoding(RenderingStatus status, XhtmlNode x, ResourceWrapper c, boolean details) { String s = ""; if (c.has("display")) s = context.getTranslated(c.child("display")); @@ -1311,10 +1315,13 @@ public class DataRenderer extends Renderer implements CodeResolver { if (Utilities.noString(s)) s = c.primitiveValue("code"); - if (context.isTechnicalMode()) { - x.addText(s+" "+context.formatPhrase(RenderingContext.DATA_REND_DETAILS_STATED, displaySystem(c.primitiveValue("system")), c.primitiveValue("code"), " = '", lookupCode(c.primitiveValue("system"), c.primitiveValue("version"), c.primitiveValue("code")), c.primitiveValue("display"), "')")); - } else - x.span(null, "{"+c.primitiveValue("system")+" "+c.primitiveValue("code")+"}").addText(s); + if (context.isTechnicalMode() && details) { + String d = c.primitiveValue("display") == null ? lookupCode(c.primitiveValue("system"), c.primitiveValue("version"), c.primitiveValue("code")): c.primitiveValue("display"); + d = context.formatPhrase(d == null || d.equals(c.primitiveValue("code")) ? RenderingContext.DATA_REND_DETAILS_STATED_ND : RenderingContext.DATA_REND_DETAILS_STATED, displaySystem(c.primitiveValue("system")), c.primitiveValue("code"), d); + x.addText(s+" "+d); + } else { + x.span(null, "{"+c.primitiveValue("system")+" "+c.primitiveValue("code")+"}").addText(s); + } } public String displayCodeableConcept(ResourceWrapper cc) { @@ -1860,8 +1867,8 @@ public class DataRenderer extends Renderer implements CodeResolver { } public void renderUsageContext(RenderingStatus status, XhtmlNode x, ResourceWrapper u) throws FHIRFormatError, DefinitionException, IOException { - renderCoding(status, x, u.child("code")); - x.tx(": "); + renderCoding(status, x, u.child("code"), false); + x.tx(" = "); renderDataType(status, x, u.child("value")); } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java index e8af42a88..9925a2acb 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java @@ -18,7 +18,9 @@ public class I18nConstants { public static final String BAD_FILE_PATH_ERROR = "Bad_file_path_error"; public static final String BASE_PROFILE__HAS_NO_TYPE = "Base_profile__has_no_type"; public static final String BASE__DERIVED_PROFILES_HAVE_DIFFERENT_TYPES____VS___ = "Base__Derived_profiles_have_different_types____vs___"; - public static final String BINDING_ADDITIONAL = "BINDING_ADDITIONAL"; + public static final String BINDING_ADDITIONAL_D = "BINDING_ADDITIONAL_D"; + public static final String BINDING_ADDITIONAL_UC = "BINDING_ADDITIONAL_UC"; + public static final String BINDING_ADDITIONAL_USAGE = "BINDING_ADDITIONAL_USAGE"; public static final String BINDING_MAX = "BINDING_MAX"; public static final String BUNDLE_BUNDLE_ENTRY_CANONICAL = "Bundle_BUNDLE_Entry_Canonical"; public static final String BUNDLE_BUNDLE_ENTRY_DOCUMENT = "Bundle_BUNDLE_Entry_Document"; @@ -1111,4 +1113,7 @@ public class I18nConstants { public static final String SD_BASE_EXPERIMENTAL = "SD_BASE_EXPERIMENTAL"; public static final String SD_ED_EXPERIMENTAL_BINDING = "SD_ED_EXPERIMENTAL_BINDING"; public static final String VALIDATION_NO_EXPERIMENTAL_CONTENT = "VALIDATION_NO_EXPERIMENTAL_CONTENT"; + public static final String SD_ED_ADDITIONAL_BINDING_USAGE_UNKNOWN = "SD_ED_ADDITIONAL_BINDING_USAGE_UNKNOWN"; + public static final String SD_ED_ADDITIONAL_BINDING_USAGE_INVALID_ELEMENT = "SD_ED_ADDITIONAL_BINDING_USAGE_INVALID_ELEMENT"; + public static final String SD_ED_ADDITIONAL_BINDING_USAGE_INVALID_TYPE = "SD_ED_ADDITIONAL_BINDING_USAGE_INVALID_TYPE"; } 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 c3b1be7da..9a2b52a5a 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 @@ -214,6 +214,7 @@ public class RenderingI18nContext extends I18nBase { public static final String DATA_REND_DATA = "DATA_REND_DATA"; public static final String DATA_REND_DETAILS = "DATA_REND_DETAILS"; public static final String DATA_REND_DETAILS_STATED = "DATA_REND_DETAILS_STATED"; + public static final String DATA_REND_DETAILS_STATED_ND = "DATA_REND_DETAILS_STATED_ND"; public static final String DATA_REND_DICOM = "DATA_REND_DICOM"; public static final String DATA_REND_DIM = "DATA_REND_DIM"; public static final String DATA_REND_DURATION = "DATA_REND_DURATION"; diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages.properties b/org.hl7.fhir.utilities/src/main/resources/Messages.properties index 35811c33e..f5b5c2782 100644 --- a/org.hl7.fhir.utilities/src/main/resources/Messages.properties +++ b/org.hl7.fhir.utilities/src/main/resources/Messages.properties @@ -13,7 +13,9 @@ Attempt_to_a_slice_an_element_that_does_not_repeat__from__in_ = Attempt to a sli Attempt_to_replace_element_name_for_a_nonchoice_type=Attempt to replace element name for a non-choice type Attempt_to_use_Terminology_server_when_no_Terminology_server_is_available = Attempt to use Terminology server when no Terminology server is available Attempt_to_use_a_snapshot_on_profile__as__before_it_is_generated = Attempt to use a snapshot on profile ''{0}'' as {1} before it is generated -BINDING_ADDITIONAL = {0} specified in an additional binding +BINDING_ADDITIONAL_D = {0} specified in an additional binding +BINDING_ADDITIONAL_UC = {0} specified in an additional binding which applies because {1} +BINDING_ADDITIONAL_USAGE = {0} = {1} BINDING_MAX = {0} specified in the max binding BUNDLE_BUNDLE_ENTRY_FOUND_MULTIPLE = Found {0} matches for ''{1}'' in the bundle ({2}) BUNDLE_BUNDLE_ENTRY_FOUND_MULTIPLE_FRAGMENT = Found {0} matches for fragment {2} in resource ''{1}'' in the bundle ({3}) @@ -1143,3 +1145,6 @@ NO_VALID_DISPLAY_AT_ALL = Cannot validate display Name ''{0}'' for {1}#{2}: No d SD_BASE_EXPERIMENTAL = The definition builds on ''{0}'' which is experimental, but this definition is not labeled as experimental SD_ED_EXPERIMENTAL_BINDING = The definition for the element ''{0}'' binds to the value set ''{1}'' which is experimental, but this structure is not labeled as experimental VALIDATION_NO_EXPERIMENTAL_CONTENT = Experimental content is not allowed in this context +SD_ED_ADDITIONAL_BINDING_USAGE_UNKNOWN = The Usage Context {0}#{1} is not recognised and may not be correct +SD_ED_ADDITIONAL_BINDING_USAGE_INVALID_ELEMENT = The Usage Context {0}#{1} is a reference to an element that does not exist +SD_ED_ADDITIONAL_BINDING_USAGE_INVALID_TYPE = The Usage Context value must be of type {1} not {0} 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 0147ecbe4..39aa5cab8 100644 --- a/org.hl7.fhir.utilities/src/main/resources/rendering-phrases.properties +++ b/org.hl7.fhir.utilities/src/main/resources/rendering-phrases.properties @@ -207,7 +207,8 @@ DATA_REND_COND = Condition DATA_REND_COUNT = Count {0} DATA_REND_DATA = Data: {0} DATA_REND_DETAILS = (Details: {0} code -DATA_REND_DETAILS_STATED = (Details: {0} code {1} {2} {3} '', stated as '' {4} {5} +DATA_REND_DETAILS_STATED = (Details: {0} code {1} = ''{2}'') +DATA_REND_DETAILS_STATED_ND = (Details: {0} code {1}) DATA_REND_DICOM = DICOM DATA_REND_DIM = Dimensions: {0} DATA_REND_DURATION = Duration {0} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java index 5c191c7c9..03d4e1cdd 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java @@ -217,6 +217,7 @@ import org.hl7.fhir.validation.instance.type.ValueSetValidator; import org.hl7.fhir.validation.instance.utils.*; import org.w3c.dom.Document; + /** * Thinking of using this in a java program? Don't! * You should use one of the wrappers instead. Either in HAPI, or use ValidationEngine @@ -1356,19 +1357,20 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat BindingStrength strength = binding.getStrength(); Extension maxVS = binding.getExtensionByUrl(ToolingExtensions.EXT_MAX_VALUESET); - checkDisp = validateBindingCodeableConcept(errors, path, element, profile, stack, bh, checkDisp, checked, cc, vsRef, valueset, strength, maxVS, true); + checkDisp = validateBindingCodeableConcept(errors, path, element, profile, stack, bh, checkDisp, checked, cc, vsRef, valueset, strength, maxVS, true, null); // } else if (binding.hasValueSet()) { // hint(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_BINDING_CANTCHECK); } else if (!noBindingMsgSuppressed) { hint(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_BINDING_NOSOURCE, path); } for (ElementDefinitionBindingAdditionalComponent ab : binding.getAdditional()) { - if (isTestableBinding(ab) && isInScope(ab)) { + StringBuilder b = new StringBuilder(); + if (isTestableBinding(ab) && isInScope(ab, profile, getResource(stack), b)) { String vsRef = ab.getValueSet(); ValueSet valueset = resolveBindingReference(profile, vsRef, profile.getUrl(), profile); BindingStrength strength = convertPurposeToStrength(ab.getPurpose()); - checkDisp = validateBindingCodeableConcept(errors, path, element, profile, stack, bh, checkDisp, checked, cc, vsRef, valueset, strength, null, false) && checkDisp; + checkDisp = validateBindingCodeableConcept(errors, path, element, profile, stack, bh, checkDisp, checked, cc, vsRef, valueset, strength, null, false, b.toString()) && checkDisp; } } } catch (CheckCodeOnServerException e) { @@ -1394,25 +1396,186 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat return checkDisp; } - private boolean isInScope(ElementDefinitionBindingAdditionalComponent ab) { + private boolean isInScope(ElementDefinitionBindingAdditionalComponent ab, StructureDefinition profile, Element resource, StringBuilder b) { + if (ab.getUsage().isEmpty()) { + return true; + } + boolean ok = true; for (UsageContext usage : ab.getUsage()) { - if (isInScope(usage)) { + if (!isInScope(usage, profile, resource, b)) { + ok = false; + } + } + return ok; + } + + private boolean isInScope(UsageContext usage, StructureDefinition profile, Element resource, StringBuilder b) { + if (isKnownUsage(usage)) { + return true; + } + if (usage.getCode().hasSystem() && (usage.getCode().getSystem().equals(profile.getUrl()) || usage.getCode().getSystem().equals(profile.getVersionedUrl()))) { + // if it's not a defined usage from external sources, it might match something in the data content + List items = findDataValue(resource, usage.getCode().getCode()); + if (matchesUsage(items, usage.getValue())) { + b.append(context.formatMessage(I18nConstants.BINDING_ADDITIONAL_USAGE, displayCoding(usage.getCode()), display(usage.getValue()))); return true; } } - return ab.getUsage().isEmpty(); + return false; } - private boolean isInScope(UsageContext usage) { - if (isKnownUsage(usage)) { + private String displayCoding(Coding value) { + return value.getCode(); + } + + private String displayCodeableConcept(CodeableConcept value) { + for (Coding c : value.getCoding()) { + String s = displayCoding(c); + if (s != null) { + return s; + } + } + return value.getText(); + } + + private String display(DataType value) { + switch (value.fhirType()) { + case "Coding" : return displayCoding((Coding) value); + case "CodeableConcept" : return displayCodeableConcept((CodeableConcept) value); + } + return value.fhirType(); + } + + private boolean matchesUsage(List items, DataType value) { + for (Element item : items) { + if (matchesUsage(item, value)) { + return true; + } + } + return false; + } + + + + private String display(List items) { + CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(); + for (Element item : items) { + display(b, item); + } + return b.toString(); + } + + private void display(CommaSeparatedStringBuilder b, Element item) { + if (item.isPrimitive()) { + b.append(item.primitiveValue()); + } else if (item.fhirType().equals("CodeableConcept")) { + for (Element c : item.getChildren("coding")) { + b.append(c.getNamedChildValue("code")); + } + } else { + b.append(item.toString()); + } + + } + + private boolean matchesUsage(Element item, DataType value) { + switch (value.fhirType()) { + case "CodeableConcept": return matchesUsageCodeableConcept(item, (CodeableConcept) value); + case "Quantity": return false; + case "Range": return false; + case "Reference": return false; + default: return false; + } + } + + private boolean matchesUsageCodeableConcept(Element item, CodeableConcept value) { + switch (item.fhirType()) { + case "CodeableConcept": return matchesUsageCodeableConceptCodeableConcept(item, value); + case "Coding": return matchesUsageCodeableConceptCoding(item, value); + default: return false; + } + } + + private boolean matchesUsageCodeableConceptCoding(Element item, CodeableConcept value) { + String system = item.getNamedChildValue("system"); + String version = item.getNamedChildValue("version"); + String code = item.getNamedChildValue("code"); + for (Coding c : value.getCoding()) { + if (system == null || !system.equals(c.getSystem())) { + return false; + } + if (code == null || !code.equals(c.getCode())) { + return false; + } + if (c.hasVersion()) { + if (version == null || !version.equals(c.getVersion())) { + return false; + } + } return true; } return false; } + private boolean matchesUsageCodeableConceptCodeableConcept(Element item, CodeableConcept value) { + for (Element code : item.getChildren("coding")) { + if (matchesUsageCodeableConceptCoding(code, value)) { + return true; + } + } + return false; + } + + private List findDataValue(Element resource, String code) { + List items = new ArrayList(); + if (resource != null) { + findDataValues(items, resource, code); + } + return items; + } + + private void findDataValues(List items, Element element, String path) { + if (element.getPath() == null) { + return; + } + if (pathMatches(element.getPath(), path)) { + items.add(element); + } else if (element.hasChildren() && path.startsWith(element.getPath())) { + for (Element child : element.getChildren()) { + findDataValues(items, child, path); + } + } + } + + private boolean pathMatches(String actualPath, String pathSpec) { + String[] ap = actualPath.split("\\."); + String[] ps = pathSpec.split("\\."); + if (ap.length != ps.length) { + return false; + } + for (int i = 0; i < ap.length; i++) { + if (!pathSegmentMatches(ap[i], ps[i])) { + return false; + } + } + return true; + } + + private boolean pathSegmentMatches(String ap, String ps) { + if (ps.contains("[")) { + return ap.equals(ps); + } else { + if (ap.contains("[")) { + ap = ap.substring(0, ap.indexOf("[")); + } + return ap.equals(ps); + } + } + private BindingStrength convertPurposeToStrength(AdditionalBindingPurposeVS purpose) { switch (purpose) { case MAXIMUM: return BindingStrength.REQUIRED; + case EXTENSIBLE: return BindingStrength.EXTENSIBLE; case PREFERRED: return BindingStrength.PREFERRED; case REQUIRED: return BindingStrength.REQUIRED; default: return null; @@ -1424,7 +1587,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat } private boolean validateBindingCodeableConcept(List errors, String path, Element element, StructureDefinition profile, NodeStack stack, BooleanHolder bh, boolean checkDisp, BooleanHolder checked, - CodeableConcept cc, String vsRef, ValueSet valueset, BindingStrength strength, Extension maxVS, boolean base) throws CheckCodeOnServerException { + CodeableConcept cc, String vsRef, ValueSet valueset, BindingStrength strength, Extension maxVS, boolean base, String usageNote) throws CheckCodeOnServerException { if (valueset == null) { CodeSystem cs = context.fetchCodeSystem(vsRef); if (rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, cs == null, I18nConstants.TERMINOLOGY_TX_VALUESET_NOTFOUND_CS, describeReference(vsRef))) { @@ -1436,12 +1599,12 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat BindingContext bc = base ? BindingContext.BASE : BindingContext.ADDITIONAL; if (!cc.hasCoding()) { if (strength == BindingStrength.REQUIRED) - bh.see(rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CODE_VALUESET, describeReference(vsRef, valueset, bc))); + bh.see(rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CODE_VALUESET, describeReference(vsRef, valueset, bc, usageNote))); else if (strength == BindingStrength.EXTENSIBLE) { if (maxVS != null) bh.see(rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CODE_VALUESETMAX, describeReference(ToolingExtensions.readStringFromExtension(maxVS)), valueset.getVersionedUrl())); else if (!noExtensibleWarnings) { - warning(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CODE_VALUESET_EXT, describeReference(vsRef, valueset, bc)); + warning(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CODE_VALUESET_EXT, describeReference(vsRef, valueset, bc, usageNote)); } } } else { @@ -1493,15 +1656,15 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat // we've already handled the warnings / errors about this, and set the status correctly. We don't need to do anything more? } else { if (strength == BindingStrength.REQUIRED) { - bh.see(txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_1_CC, describeReference(vsRef, valueset, bc), ccSummary(cc))); + bh.see(txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_1_CC, describeReference(vsRef, valueset, bc, usageNote), ccSummary(cc))); } else if (strength == BindingStrength.EXTENSIBLE) { if (maxVS != null) bh.see(checkMaxValueSet(errors, path, element, profile, ToolingExtensions.readStringFromExtension(maxVS), cc, stack)); if (!noExtensibleWarnings) - txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_2_CC, describeReference(vsRef, valueset, bc), ccSummary(cc)); + txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_2_CC, describeReference(vsRef, valueset, bc, usageNote), ccSummary(cc)); } else if (strength == BindingStrength.PREFERRED) { if (baseOnly) { - txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_3_CC, describeReference(vsRef, valueset, bc), ccSummary(cc)); + txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_3_CC, describeReference(vsRef, valueset, bc, usageNote), ccSummary(cc)); } } } @@ -1648,7 +1811,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat BindingStrength strength = binding.getStrength(); Extension vsMax = binding.getExtensionByUrl(ToolingExtensions.EXT_MAX_VALUESET); - validateBindingCodeableConcept(errors, path, element, profile, stack, ok, false, new BooleanHolder(), cc, vsRef, valueset, strength, vsMax, true); + validateBindingCodeableConcept(errors, path, element, profile, stack, ok, false, new BooleanHolder(), cc, vsRef, valueset, strength, vsMax, true, null); // special case: if the logical model has both CodeableConcept and Coding mappings, we'll also check the first coding. if (getMapping("http://hl7.org/fhir/terminology-pattern", logical, logical.getSnapshot().getElementFirstRep()).contains("Coding")) { @@ -1660,11 +1823,12 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat hint(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_BINDING_NOSOURCE, path); } for (ElementDefinitionBindingAdditionalComponent ab : binding.getAdditional()) { - if (isTestableBinding(ab) && isInScope(ab)) { + StringBuilder b = new StringBuilder(); + if (isTestableBinding(ab) && isInScope(ab, profile, getResource(stack), b)) { String vsRef = ab.getValueSet(); ValueSet valueset = resolveBindingReference(profile, vsRef, profile.getUrl(), profile); BindingStrength strength = convertPurposeToStrength(ab.getPurpose()); - validateBindingCodeableConcept(errors, path, element, profile, stack, ok, false, new BooleanHolder(), cc, vsRef, valueset, strength, null, false); + validateBindingCodeableConcept(errors, path, element, profile, stack, ok, false, new BooleanHolder(), cc, vsRef, valueset, strength, null, false, b.toString()); } } } @@ -1698,18 +1862,19 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat BindingStrength strength = binding.getStrength(); Extension vsMax = binding.getExtensionByUrl(ToolingExtensions.EXT_MAX_VALUESET); - ok = validateBindingTerminologyCoding(errors, path, element, profile, stack, ok, c, code, system, display, vsRef, valueset, strength, vsMax, true); + ok = validateBindingTerminologyCoding(errors, path, element, profile, stack, ok, c, code, system, display, vsRef, valueset, strength, vsMax, true, null); } else if (binding.hasValueSet()) { hint(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_BINDING_CANTCHECK); } else if (!inCodeableConcept && !noBindingMsgSuppressed) { hint(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_BINDING_NOSOURCE, path); } for (ElementDefinitionBindingAdditionalComponent ab : binding.getAdditional()) { - if (isTestableBinding(ab) && isInScope(ab)) { + StringBuilder b = new StringBuilder(); + if (isTestableBinding(ab) && isInScope(ab, profile, getResource(stack), b)) { String vsRef = ab.getValueSet(); ValueSet valueset = resolveBindingReference(profile, vsRef, profile.getUrl(), profile); BindingStrength strength = convertPurposeToStrength(ab.getPurpose()); - ok = validateBindingTerminologyCoding(errors, path, element, profile, stack, ok, c, code, system, display, vsRef, valueset, strength, null, true) && ok; + ok = validateBindingTerminologyCoding(errors, path, element, profile, stack, ok, c, code, system, display, vsRef, valueset, strength, null, true, b.toString()) && ok; } } } @@ -1728,7 +1893,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat private boolean validateBindingTerminologyCoding(List errors, String path, Element element, StructureDefinition profile, NodeStack stack, boolean ok, Coding c, String code, String system, String display, - String vsRef, ValueSet valueset, BindingStrength strength, Extension vsMax, boolean base) { + String vsRef, ValueSet valueset, BindingStrength strength, Extension vsMax, boolean base, String usageNote) { if (valueset == null) { CodeSystem cs = context.fetchCodeSystem(vsRef); if (rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, cs == null, I18nConstants.TERMINOLOGY_TX_VALUESET_NOTFOUND_CS, describeReference(vsRef))) { @@ -1754,27 +1919,27 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_BINDING_NOSERVER, system+"#"+code); else if (vr.getErrorClass() != null && vr.getErrorClass().isInfrastructure()) { if (strength == BindingStrength.REQUIRED) - txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_4a, describeReference(vsRef, valueset, bc), vr.getMessage(), system+"#"+code); + txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_4a, describeReference(vsRef, valueset, bc, usageNote), vr.getMessage(), system+"#"+code); else if (strength == BindingStrength.EXTENSIBLE) { if (vsMax != null) checkMaxValueSet(errors, path, element, profile, ToolingExtensions.readStringFromExtension(vsMax), c, stack); else if (!noExtensibleWarnings) - txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_5, describeReference(vsRef, valueset, bc)); + txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_5, describeReference(vsRef, valueset, bc, usageNote)); } else if (strength == BindingStrength.PREFERRED) { if (baseOnly) { - txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_6, describeReference(vsRef, valueset, bc)); + txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_6, describeReference(vsRef, valueset, bc, usageNote)); } } } else if (strength == BindingStrength.REQUIRED) - ok= txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_4, describeReference(vsRef, valueset, bc), (vr.getMessage() != null ? " (error message = " + vr.getMessage() + ")" : ""), system+"#"+code) && ok; + ok= txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_4, describeReference(vsRef, valueset, bc, usageNote), (vr.getMessage() != null ? " (error message = " + vr.getMessage() + ")" : ""), system+"#"+code) && ok; else if (strength == BindingStrength.EXTENSIBLE) { if (vsMax != null) ok = checkMaxValueSet(errors, path, element, profile, ToolingExtensions.readStringFromExtension(vsMax), c, stack) && ok; else - txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_5, describeReference(vsRef, valueset, bc), (vr.getMessage() != null ? " (error message = " + vr.getMessage() + ")" : ""), system+"#"+code); + txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_5, describeReference(vsRef, valueset, bc, usageNote), (vr.getMessage() != null ? " (error message = " + vr.getMessage() + ")" : ""), system+"#"+code); } else if (strength == BindingStrength.PREFERRED) { if (baseOnly) { - txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_6, describeReference(vsRef, valueset, bc), (vr.getMessage() != null ? " (error message = " + vr.getMessage() + ")" : ""), system+"#"+code); + txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_6, describeReference(vsRef, valueset, bc, usageNote), (vr.getMessage() != null ? " (error message = " + vr.getMessage() + ")" : ""), system+"#"+code); } } } else if (vr != null && vr.getMessage() != null){ @@ -1896,9 +2061,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat timeTracker.tx(t, "vc "+cc.toString()); if (!vr.isOk()) { if (vr.getErrorClass() != null && vr.getErrorClass().isInfrastructure()) - txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_7, describeReference(maxVSUrl, valueset, BindingContext.MAXVS), vr.getMessage()); + txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_7, describeReference(maxVSUrl, valueset, BindingContext.MAXVS, null), vr.getMessage()); else - ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_8, describeReference(maxVSUrl, valueset, BindingContext.MAXVS), ccSummary(cc)) && ok; + ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_8, describeReference(maxVSUrl, valueset, BindingContext.MAXVS, null), ccSummary(cc)) && ok; } } catch (CheckCodeOnServerException e) { if (STACK_TRACE) e.getCause().printStackTrace(); @@ -1936,9 +2101,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat timeTracker.tx(t, "vc "+c.getSystem()+"#"+c.getCode()+" '"+c.getDisplay()+"'"); if (!vr.isOk()) { if (vr.getErrorClass() != null && vr.getErrorClass().isInfrastructure()) - txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_9, describeReference(maxVSUrl, valueset, BindingContext.MAXVS), vr.getMessage(), c.getSystem()+"#"+c.getCode()); + txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_9, describeReference(maxVSUrl, valueset, BindingContext.MAXVS, null), vr.getMessage(), c.getSystem()+"#"+c.getCode()); else - ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_10, describeReference(maxVSUrl, valueset, BindingContext.MAXVS), c.getSystem(), c.getCode()) && ok; + ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_10, describeReference(maxVSUrl, valueset, BindingContext.MAXVS, null), c.getSystem(), c.getCode()) && ok; } } catch (Exception e) { if (STACK_TRACE) e.printStackTrace(); @@ -1966,9 +2131,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat timeTracker.tx(t, "vc "+value); if (!vr.isOk()) { if (vr.getErrorClass() != null && vr.getErrorClass().isInfrastructure()) - txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_9, describeReference(maxVSUrl, valueset, BindingContext.BASE), vr.getMessage(), value); + txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_9, describeReference(maxVSUrl, valueset, BindingContext.BASE, null), vr.getMessage(), value); else { - ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_11, describeReference(maxVSUrl, valueset, BindingContext.BASE), vr.getMessage()) && ok; + ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_11, describeReference(maxVSUrl, valueset, BindingContext.BASE, null), vr.getMessage()) && ok; } } } catch (Exception e) { @@ -2029,7 +2194,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat BindingStrength strength = binding.getStrength(); Extension vsMax = binding.getExtensionByUrl(ToolingExtensions.EXT_MAX_VALUESET); - ok = validateBindingCodedElement(errors, path, element, profile, stack, theCode, theSystem, ok, checked, c, vsRef, valueset, strength, vsMax, true); + ok = validateBindingCodedElement(errors, path, element, profile, stack, theCode, theSystem, ok, checked, c, vsRef, valueset, strength, vsMax, true, null); // } else if (binding.hasValueSet()) { // hint(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_BINDING_CANTCHECK); @@ -2038,12 +2203,13 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat } for (ElementDefinitionBindingAdditionalComponent ab : binding.getAdditional()) { - if (isTestableBinding(ab) && isInScope(ab)) { + StringBuilder b = new StringBuilder(); + if (isTestableBinding(ab) && isInScope(ab, profile, getResource(stack), b)) { String vsRef = ab.getValueSet(); ValueSet valueset = resolveBindingReference(profile, vsRef, profile.getUrl(), profile); BindingStrength strength = convertPurposeToStrength(ab.getPurpose()); - ok = validateBindingCodedElement(errors, path, element, profile, stack, theCode, theSystem, ok, checked, c, vsRef, valueset, strength, null, false) && ok; + ok = validateBindingCodedElement(errors, path, element, profile, stack, theCode, theSystem, ok, checked, c, vsRef, valueset, strength, null, false, b.toString()) && ok; } } } catch (Exception e) { @@ -2068,9 +2234,19 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat return ok; } + private Element getResource(NodeStack stack) { + if (stack.getElement().isResource()) { + return stack.getElement(); + } + if (stack.getParent() == null) { + return null; + } + return getResource(stack.getParent()); + } + private boolean validateBindingCodedElement(List errors, String path, Element element, StructureDefinition profile, NodeStack stack, String theCode, String theSystem, boolean ok, BooleanHolder checked, - Coding c, String vsRef, ValueSet valueset, BindingStrength strength, Extension vsMax, boolean base) { + Coding c, String vsRef, ValueSet valueset, BindingStrength strength, Extension vsMax, boolean base, String usageNote) { if (valueset == null) { CodeSystem cs = context.fetchCodeSystem(vsRef); if (rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, cs == null, I18nConstants.TERMINOLOGY_TX_VALUESET_NOTFOUND_CS, describeReference(vsRef))) { @@ -2098,28 +2274,28 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_BINDING_NOSERVER, theSystem+"#"+theCode); else if (vr.getErrorClass() != null && !vr.getErrorClass().isInfrastructure()) { if (strength == BindingStrength.REQUIRED) - ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_4a, describeReference(vsRef, valueset, bc), vr.getMessage(), theSystem+"#"+theCode) && ok; + ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_4a, describeReference(vsRef, valueset, bc, usageNote), vr.getMessage(), theSystem+"#"+theCode) && ok; else if (strength == BindingStrength.EXTENSIBLE) { if (vsMax != null) checkMaxValueSet(errors, path, element, profile, ToolingExtensions.readStringFromExtension(vsMax), c, stack); else if (!noExtensibleWarnings) - txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_5, describeReference(vsRef, valueset, bc), theSystem+"#"+theCode); + txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_5, describeReference(vsRef, valueset, bc, usageNote), theSystem+"#"+theCode); } else if (strength == BindingStrength.PREFERRED) { if (baseOnly) { - txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_6, describeReference(vsRef, valueset, bc), theSystem+"#"+theCode); + txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_CONFIRM_6, describeReference(vsRef, valueset, bc, usageNote), theSystem+"#"+theCode); } } } else if (strength == BindingStrength.REQUIRED) - ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_12, describeReference(vsRef, valueset, bc), getErrorMessage(vr.getMessage()), theSystem+"#"+theCode) && ok; + ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_12, describeReference(vsRef, valueset, bc, usageNote), getErrorMessage(vr.getMessage()), theSystem+"#"+theCode) && ok; else if (strength == BindingStrength.EXTENSIBLE) { if (vsMax != null) ok = checkMaxValueSet(errors, path, element, profile, ToolingExtensions.readStringFromExtension(vsMax), c, stack) && ok; else if (!noExtensibleWarnings) { - txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_13, describeReference(vsRef, valueset, bc), getErrorMessage(vr.getMessage()), c.getSystem()+"#"+c.getCode()); + txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_13, describeReference(vsRef, valueset, bc, usageNote), getErrorMessage(vr.getMessage()), c.getSystem()+"#"+c.getCode()); } } else if (strength == BindingStrength.PREFERRED) { if (baseOnly) { - txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_14, describeReference(vsRef, valueset, bc), getErrorMessage(vr.getMessage()), theSystem+"#"+theCode); + txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_14, describeReference(vsRef, valueset, bc, usageNote), getErrorMessage(vr.getMessage()), theSystem+"#"+theCode); } } } else if (vr != null && vr.getMessage() != null) { @@ -3563,15 +3739,15 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat } else if (vr.getErrorClass() != null && vr.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED) { txWarning(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, vr.getMessage()); } else if (binding.getStrength() == BindingStrength.REQUIRED) { - ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_16, value, describeReference(binding.getValueSet(), vs, BindingContext.BASE), getErrorMessage(vr.getMessage())) && ok; + ok = txRule(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_16, value, describeReference(binding.getValueSet(), vs, BindingContext.BASE, null), getErrorMessage(vr.getMessage())) && ok; } else if (binding.getStrength() == BindingStrength.EXTENSIBLE) { if (binding.hasExtension(ToolingExtensions.EXT_MAX_VALUESET)) ok = checkMaxValueSet(errors, path, element, profile, ToolingExtensions.readStringExtension(binding, ToolingExtensions.EXT_MAX_VALUESET), value, stack) && ok; else if (!noExtensibleWarnings && !isOkExtension(value, vs)) - txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_17, value, describeReference(binding.getValueSet(), vs, BindingContext.BASE), getErrorMessage(vr.getMessage())); + txWarningForLaterRemoval(element, errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_17, value, describeReference(binding.getValueSet(), vs, BindingContext.BASE, null), getErrorMessage(vr.getMessage())); } else if (binding.getStrength() == BindingStrength.PREFERRED) { if (baseOnly) { - txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_18, value, describeReference(binding.getValueSet(), vs, BindingContext.BASE), getErrorMessage(vr.getMessage())); + txHint(errors, NO_RULE_DATE, vr.getTxLink(), IssueType.CODEINVALID, element.line(), element.col(), path, false, I18nConstants.TERMINOLOGY_TX_NOVALID_18, value, describeReference(binding.getValueSet(), vs, BindingContext.BASE, null), getErrorMessage(vr.getMessage())); } } } else if (vr != null && vr.getMessage() != null){ @@ -4279,7 +4455,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat return false; } - private String describeReference(String reference, CanonicalResource target, BindingContext ctxt) { + private String describeReference(String reference, CanonicalResource target, BindingContext ctxt, String usageNote) { if (reference == null && target == null) return "null"; String res = null; @@ -4297,7 +4473,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat } } switch (ctxt) { - case ADDITIONAL: return context.formatMessage(I18nConstants.BINDING_ADDITIONAL, res); + case ADDITIONAL: return context.formatMessage(Utilities.noString(usageNote) ? I18nConstants.BINDING_ADDITIONAL_D : I18nConstants.BINDING_ADDITIONAL_UC, res, usageNote); case MAXVS: return context.formatMessage(I18nConstants.BINDING_MAX, res); default: return res; } diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java index 0df6dd68f..db777b0c3 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java @@ -525,7 +525,7 @@ public class StructureDefinitionValidator extends BaseValidator { ok = rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), characteristics.contains("can-bind") , I18nConstants.SD_ILLEGAL_CHARACTERISTICS, "Binding", typeCodes) && ok; } Element binding = element.getNamedChild("binding", false); - ok = validateBinding(errors, binding, stack.push(binding, -1, null, null), typeCodes, snapshot, path, experimental) && ok; + ok = validateBinding(errors, binding, stack.push(binding, -1, null, null), typeCodes, snapshot, path, experimental, sd) && ok; } else { // this is a good idea but there's plenty of cases where the rule isn't met; maybe one day it's worth investing the time to exclude these cases and bring this rule back // String bt = boundType(typeCodes); @@ -989,7 +989,7 @@ public class StructureDefinitionValidator extends BaseValidator { return null; } - private boolean validateBinding(List errors, Element binding, NodeStack stack, Set typeCodes, boolean snapshot, String path, boolean experimental) { + private boolean validateBinding(List errors, Element binding, NodeStack stack, Set typeCodes, boolean snapshot, String path, boolean experimental, StructureDefinition profile) { boolean ok = true; if (bindableType(typeCodes) == null) { ok = rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), !snapshot, I18nConstants.SD_ED_BIND_NO_BINDABLE, path, typeCodes.toString()) && ok; @@ -1019,9 +1019,122 @@ public class StructureDefinitionValidator extends BaseValidator { } } } + if (binding.hasChildren("additional")) { + int i = 0; + for (Element ab : binding.getChildren("additional")) { + ok = validateAdditionalBinding(errors, ab, stack.push(ab, i, null, null), snapshot, path, experimental) && ok; + i++; + } + } + if (binding.hasExtension(ToolingExtensions.EXT_BINDING_ADDITIONAL)) { + int i = 0; + for (Element ab : binding.getChildren("extension")) { + String url = ab.getNamedChildValue("url"); + if (ToolingExtensions.EXT_BINDING_ADDITIONAL.equals(url)) { + ok = validateAdditionalBindingExtension(errors, ab, stack.push(ab, i, null, null), snapshot, path, experimental, profile) && ok; + } + i++; + } + } + return ok; + } + + private boolean validateAdditionalBinding(List errors, Element binding, NodeStack stack, boolean snapshot, String path, boolean experimental) { + boolean ok = true; + + if (binding.hasChild("valueSet", false)) { + Element valueSet = binding.getNamedChild("valueSet", false); + String ref = valueSet.hasPrimitiveValue() ? valueSet.primitiveValue() : valueSet.getNamedChildValue("reference", false); + if (warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), !snapshot || ref != null, I18nConstants.SD_ED_SHOULD_BIND_WITH_VS, path)) { + Resource vs = context.fetchResource(Resource.class, ref); + + // just because we can't resolve it directly doesn't mean that terminology server can't. Check with it + + if (warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs != null || serverSupportsValueSet(ref), I18nConstants.SD_ED_BIND_UNKNOWN_VS, path, ref)) { + if (vs != null) { + if (rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs instanceof ValueSet, I18nConstants.SD_ED_BIND_NOT_VS, path, ref, vs.fhirType())) { + ValueSet vsr = (ValueSet) vs; + warning(errors, "2024-09-17", IssueType.BUSINESSRULE, stack.getLiteralPath(), !vsr.getExperimental() || experimental, I18nConstants.SD_ED_EXPERIMENTAL_BINDING, path, ref); + } else { + ok = false; + } + } + } + } + } + if (binding.hasChildren("usage")) { + for (Element usage : binding.getChildren("usage")) { + warning(errors, "2024-09-20", IssueType.BUSINESSRULE, stack.getLiteralPath(), false, "test"); + } + } return ok; } + private boolean validateAdditionalBindingExtension(List errors, Element binding, NodeStack stack, boolean snapshot, String path, boolean experimental, StructureDefinition profile) { + boolean ok = true; + + if (binding.hasExtension("valueSet")) { + Element valueSet = binding.getExtension("valueSet"); + Element vv = valueSet.getNamedChild("value"); + String ref = vv.hasPrimitiveValue() ? vv.primitiveValue() : vv.getNamedChildValue("reference", false); + if (warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), !snapshot || ref != null, I18nConstants.SD_ED_SHOULD_BIND_WITH_VS, path)) { + Resource vs = context.fetchResource(Resource.class, ref); + + // just because we can't resolve it directly doesn't mean that terminology server can't. Check with it + + if (warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs != null || serverSupportsValueSet(ref), I18nConstants.SD_ED_BIND_UNKNOWN_VS, path, ref)) { + if (vs != null) { + if (rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs instanceof ValueSet, I18nConstants.SD_ED_BIND_NOT_VS, path, ref, vs.fhirType())) { + ValueSet vsr = (ValueSet) vs; + warning(errors, "2024-09-17", IssueType.BUSINESSRULE, stack.getLiteralPath(), !vsr.getExperimental() || experimental, I18nConstants.SD_ED_EXPERIMENTAL_BINDING, path, ref); + } else { + ok = false; + } + } + } + } + } + if (binding.hasExtension("usage")) { + int i = 0; + for (Element usage : binding.getChildren("extension")) { + String url = usage.getNamedChildValue("url"); + if ("usage".equals(url)) { + Element uv = usage.getNamedChild("value"); + ok = validateAdditionalBindingUsage(errors, uv, stack.push(uv, -1, null, null), path, profile) && ok; + } + i++; + } + } + return ok; + } + + private boolean validateAdditionalBindingUsage(List errors, Element usage, NodeStack stack, String path, StructureDefinition profile) { + boolean ok = true; + Element cc = usage.getNamedChild("code"); + if (cc != null) { + String system = cc.getNamedChildValue("system"); + String code = cc.getNamedChildValue("code"); + if (system != null && system.equals(profile.getUrl())) { + ElementDefinition ed = profile.getDifferential().getElementByPath(code); + if (ed == null) { + ed = profile.getSnapshot().getElementByPath(code); + } + if (ed == null) { + ok = false; + rule(errors, "2024-09-17", IssueType.BUSINESSRULE, stack.getLiteralPath(), false, I18nConstants.SD_ED_ADDITIONAL_BINDING_USAGE_INVALID_ELEMENT, system, code); + } else { + if (usage.hasChild("value")) { + String t = usage.getNamedChild("value").fhirType(); + ok = rule(errors, "2024-09-20", IssueType.BUSINESSRULE, stack.getLiteralPath(), "CodeableConcept".equals(t), I18nConstants.SD_ED_ADDITIONAL_BINDING_USAGE_INVALID_TYPE, t, "CodeableConcept") && ok; + } + } + } else { + warning(errors, "2024-09-17", IssueType.BUSINESSRULE, stack.getLiteralPath(), false, I18nConstants.SD_ED_ADDITIONAL_BINDING_USAGE_UNKNOWN, system, code); + } + } + return ok; + } + private Set getListofBindableTypes(Set types) { Set res = new HashSet<>(); for (String s : types) { diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/testStructureDefinitionadditional-bindings-profile-cs.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/testStructureDefinitionadditional-bindings-profile-cs.cache new file mode 100644 index 000000000..a194229ef --- /dev/null +++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/testStructureDefinitionadditional-bindings-profile-cs.cache @@ -0,0 +1,42 @@ +------------------------------------------------------------------------------------- +{"code" : { + "system" : "http://hl7.org/fhir/test/StructureDefinition/additional-bindings-profile-cs", + "code" : "digital-access" +}, "valueSet" :null, "langs":"en-US", "useServer":"true", "useClient":"false", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": { + "resourceType" : "Parameters", + "parameter" : [{ + "name" : "profile-url", + "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891" + }] +}}#### +v: { + "code" : "digital-access", + "system" : "http://hl7.org/fhir/test/StructureDefinition/additional-bindings-profile-cs", + "severity" : "error", + "error" : "A definition for CodeSystem 'http://hl7.org/fhir/test/StructureDefinition/additional-bindings-profile-cs' could not be found, so the code cannot be validated", + "class" : "CODESYSTEM_UNSUPPORTED", + "server" : "http://tx-dev.fhir.org/r4", + "unknown-systems" : "http://hl7.org/fhir/test/StructureDefinition/additional-bindings-profile-cs", + "issues" : { + "resourceType" : "OperationOutcome", + "issue" : [{ + "extension" : [{ + "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server", + "valueUrl" : "http://tx-dev.fhir.org/r4" + }], + "severity" : "error", + "code" : "not-found", + "details" : { + "coding" : [{ + "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type", + "code" : "not-found" + }], + "text" : "A definition for CodeSystem 'http://hl7.org/fhir/test/StructureDefinition/additional-bindings-profile-cs' could not be found, so the code cannot be validated" + }, + "location" : ["Coding.system"], + "expression" : ["Coding.system"] + }] +} + +} +------------------------------------------------------------------------------------- diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/ussdoh-clinicalcareCodeSystemSDOHCC-CodeSystemTemporaryCodes.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/ussdoh-clinicalcareCodeSystemSDOHCC-CodeSystemTemporaryCodes.cache new file mode 100644 index 000000000..ffc75d0de --- /dev/null +++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/ussdoh-clinicalcareCodeSystemSDOHCC-CodeSystemTemporaryCodes.cache @@ -0,0 +1,83 @@ +------------------------------------------------------------------------------------- +{"code" : { + "system" : "http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes", + "code" : "digital-access-x" +}, "valueSet" :null, "langs":"en-US", "useServer":"true", "useClient":"false", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": { + "resourceType" : "Parameters", + "parameter" : [{ + "name" : "profile-url", + "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891" + }] +}}#### +v: { + "code" : "digital-access-x", + "system" : "http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes", + "severity" : "error", + "error" : "A definition for CodeSystem 'http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes' could not be found, so the code cannot be validated", + "class" : "CODESYSTEM_UNSUPPORTED", + "server" : "http://tx-dev.fhir.org/r4", + "unknown-systems" : "http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes", + "issues" : { + "resourceType" : "OperationOutcome", + "issue" : [{ + "extension" : [{ + "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server", + "valueUrl" : "http://tx-dev.fhir.org/r4" + }], + "severity" : "error", + "code" : "not-found", + "details" : { + "coding" : [{ + "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type", + "code" : "not-found" + }], + "text" : "A definition for CodeSystem 'http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes' could not be found, so the code cannot be validated" + }, + "location" : ["Coding.system"], + "expression" : ["Coding.system"] + }] +} + +} +------------------------------------------------------------------------------------- +{"code" : { + "system" : "http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes", + "code" : "digital-access" +}, "valueSet" :null, "langs":"en-US", "useServer":"true", "useClient":"false", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": { + "resourceType" : "Parameters", + "parameter" : [{ + "name" : "profile-url", + "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891" + }] +}}#### +v: { + "code" : "digital-access", + "system" : "http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes", + "severity" : "error", + "error" : "A definition for CodeSystem 'http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes' could not be found, so the code cannot be validated", + "class" : "CODESYSTEM_UNSUPPORTED", + "server" : "http://tx-dev.fhir.org/r4", + "unknown-systems" : "http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes", + "issues" : { + "resourceType" : "OperationOutcome", + "issue" : [{ + "extension" : [{ + "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server", + "valueUrl" : "http://tx-dev.fhir.org/r4" + }], + "severity" : "error", + "code" : "not-found", + "details" : { + "coding" : [{ + "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type", + "code" : "not-found" + }], + "text" : "A definition for CodeSystem 'http://hl7.org/fhir/us/sdoh-clinicalcare/CodeSystem/SDOHCC-CodeSystemTemporaryCodes' could not be found, so the code cannot be validated" + }, + "location" : ["Coding.system"], + "expression" : ["Coding.system"] + }] +} + +} +------------------------------------------------------------------------------------- From 859bac536741989263a152064b90813260bd435f Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sun, 22 Sep 2024 06:37:48 -0400 Subject: [PATCH 32/68] Add r4b support to Package Version Generation --- .../misc/NpmPackageVersionConverter.java | 59 +++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/NpmPackageVersionConverter.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/NpmPackageVersionConverter.java index 99b84dea0..3a1c3db25 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/NpmPackageVersionConverter.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/NpmPackageVersionConverter.java @@ -33,9 +33,11 @@ import org.hl7.fhir.convertors.factory.VersionConvertorFactory_30_40; import org.hl7.fhir.convertors.factory.VersionConvertorFactory_30_50; import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50; import org.hl7.fhir.r5.model.Enumeration; +import org.hl7.fhir.r5.model.Enumerations.FHIRVersion; import org.hl7.fhir.r5.model.Enumerations.FHIRVersionEnumFactory; import org.hl7.fhir.r5.model.ImplementationGuide; import org.hl7.fhir.r5.model.Resource; +import org.hl7.fhir.r5.model.StructureDefinition; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.VersionUtilities; @@ -237,7 +239,7 @@ public class NpmPackageVersionConverter { return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(VersionConvertorFactory_14_30.convertResource(VersionConvertorFactory_10_30.convertResource(res))); } else if (VersionUtilities.isR3Ver(version)) { return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(VersionConvertorFactory_10_30.convertResource(res)); - } else if (VersionUtilities.isR4Ver(version)) { + } else if (VersionUtilities.isR4Ver(version) || VersionUtilities.isR4BVer(version)) { return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(VersionConvertorFactory_10_40.convertResource(res)); } else if (VersionUtilities.isR5Plus(version)) { return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(VersionConvertorFactory_10_50.convertResource(res)); @@ -251,7 +253,7 @@ public class NpmPackageVersionConverter { return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(res); } else if (VersionUtilities.isR3Ver(version)) { return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(VersionConvertorFactory_14_30.convertResource(res)); - } else if (VersionUtilities.isR4Ver(version)) { + } else if (VersionUtilities.isR4Ver(version) || VersionUtilities.isR4BVer(version)) { return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(VersionConvertorFactory_14_40.convertResource(res)); } else if (VersionUtilities.isR5Plus(version)) { return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(VersionConvertorFactory_14_50.convertResource(res)); @@ -265,7 +267,7 @@ public class NpmPackageVersionConverter { return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(VersionConvertorFactory_14_30.convertResource(res)); } else if (VersionUtilities.isR3Ver(version)) { return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(res); - } else if (VersionUtilities.isR4Ver(version)) { + } else if (VersionUtilities.isR4Ver(version) || VersionUtilities.isR4BVer(version)) { return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(VersionConvertorFactory_30_40.convertResource(res)); } else if (VersionUtilities.isR5Plus(version)) { return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(VersionConvertorFactory_30_50.convertResource(res)); @@ -279,7 +281,21 @@ public class NpmPackageVersionConverter { return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(VersionConvertorFactory_14_40.convertResource(res)); } else if (VersionUtilities.isR3Ver(version)) { return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(VersionConvertorFactory_30_40.convertResource(res, new BaseAdvisor_30_40(false))); - } else if (VersionUtilities.isR4Ver(version)) { + } else if (VersionUtilities.isR4Ver(version) || VersionUtilities.isR4BVer(version)) { + return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(res); + } else if (VersionUtilities.isR5Plus(version)) { + return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(VersionConvertorFactory_40_50.convertResource(res)); + } + } else if (VersionUtilities.isR4BVer(currentVersion)) { + org.hl7.fhir.r4.model.Resource res = new org.hl7.fhir.r4.formats.JsonParser().parse(cnt); + convertResourceR4B(res); + if (VersionUtilities.isR2Ver(version)) { + return new org.hl7.fhir.dstu2.formats.JsonParser().composeBytes(VersionConvertorFactory_10_40.convertResource(res, new PR2Handler())); + } else if (VersionUtilities.isR2BVer(version)) { + return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(VersionConvertorFactory_14_40.convertResource(res)); + } else if (VersionUtilities.isR3Ver(version)) { + return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(VersionConvertorFactory_30_40.convertResource(res, new BaseAdvisor_30_40(false))); + } else if (VersionUtilities.isR4Ver(version) || VersionUtilities.isR4BVer(version)) { return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(res); } else if (VersionUtilities.isR5Plus(version)) { return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(VersionConvertorFactory_40_50.convertResource(res)); @@ -293,7 +309,7 @@ public class NpmPackageVersionConverter { return new org.hl7.fhir.dstu2016may.formats.JsonParser().composeBytes(VersionConvertorFactory_14_50.convertResource(res)); } else if (VersionUtilities.isR3Ver(version)) { return new org.hl7.fhir.dstu3.formats.JsonParser().composeBytes(VersionConvertorFactory_30_50.convertResource(res, new BaseAdvisor_30_50(false))); - } else if (VersionUtilities.isR4Ver(version)) { + } else if (VersionUtilities.isR4Ver(version) || VersionUtilities.isR4BVer(version)) { return new org.hl7.fhir.r4.formats.JsonParser().composeBytes(VersionConvertorFactory_40_50.convertResource(res)); } else if (VersionUtilities.isR5Plus(version)) { return new org.hl7.fhir.r5.formats.JsonParser().composeBytes(res); @@ -311,6 +327,10 @@ public class NpmPackageVersionConverter { org.hl7.fhir.dstu2.model.ImplementationGuide ig = (org.hl7.fhir.dstu2.model.ImplementationGuide) res; ig.setFhirVersion(version); } + if (res instanceof org.hl7.fhir.dstu2.model.StructureDefinition) { + org.hl7.fhir.dstu2.model.StructureDefinition sd = (org.hl7.fhir.dstu2.model.StructureDefinition) res; + sd.setFhirVersion(version); + } } private void convertResourceR2B(org.hl7.fhir.dstu2016may.model.Resource res) { @@ -318,6 +338,10 @@ public class NpmPackageVersionConverter { org.hl7.fhir.dstu2016may.model.ImplementationGuide ig = (org.hl7.fhir.dstu2016may.model.ImplementationGuide) res; ig.setFhirVersion(version); } + if (res instanceof org.hl7.fhir.dstu2016may.model.StructureDefinition) { + org.hl7.fhir.dstu2016may.model.StructureDefinition sd = (org.hl7.fhir.dstu2016may.model.StructureDefinition) res; + sd.setFhirVersion(version); + } } private void convertResourceR3(org.hl7.fhir.dstu3.model.Resource res) { @@ -325,6 +349,10 @@ public class NpmPackageVersionConverter { org.hl7.fhir.dstu3.model.ImplementationGuide ig = (org.hl7.fhir.dstu3.model.ImplementationGuide) res; ig.setFhirVersion(version); } + if (res instanceof org.hl7.fhir.dstu3.model.StructureDefinition) { + org.hl7.fhir.dstu3.model.StructureDefinition sd = (org.hl7.fhir.dstu3.model.StructureDefinition) res; + sd.setFhirVersion(version); + } } private void convertResourceR4(org.hl7.fhir.r4.model.Resource res) { @@ -334,6 +362,23 @@ public class NpmPackageVersionConverter { ig.getFhirVersion().add(new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.Enumerations.FHIRVersionEnumFactory(), version)); ig.setPackageId(packageId); } + if (res instanceof org.hl7.fhir.r4.model.StructureDefinition) { + org.hl7.fhir.r4.model.StructureDefinition sd = (org.hl7.fhir.r4.model.StructureDefinition) res; + sd.setFhirVersion(org.hl7.fhir.r4.model.Enumerations.FHIRVersion.fromCode(version)); + } + } + + private void convertResourceR4B(org.hl7.fhir.r4.model.Resource res) { + if (res instanceof org.hl7.fhir.r4.model.ImplementationGuide) { + org.hl7.fhir.r4.model.ImplementationGuide ig = (org.hl7.fhir.r4.model.ImplementationGuide) res; + ig.getFhirVersion().clear(); + ig.getFhirVersion().add(new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.Enumerations.FHIRVersionEnumFactory(), version)); + ig.setPackageId(packageId); + } + if (res instanceof org.hl7.fhir.r4.model.StructureDefinition) { + org.hl7.fhir.r4.model.StructureDefinition sd = (org.hl7.fhir.r4.model.StructureDefinition) res; + sd.setFhirVersion(org.hl7.fhir.r4.model.Enumerations.FHIRVersion.fromCode(version)); + } } @@ -344,6 +389,10 @@ public class NpmPackageVersionConverter { ig.getFhirVersion().add(new Enumeration<>(new FHIRVersionEnumFactory(), version)); ig.setPackageId(packageId); } + if (res instanceof StructureDefinition) { + StructureDefinition sd = (StructureDefinition) res; + sd.setFhirVersion(FHIRVersion.fromCode(version)); + } } } \ No newline at end of file From 15278061f9114c489be36d3b378ae6608cddbf7c Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sun, 22 Sep 2024 06:38:04 -0400 Subject: [PATCH 33/68] Add support for active only to VSAC importer --- .../fhir/convertors/misc/VSACImporter.java | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/VSACImporter.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/VSACImporter.java index 61e4fb04c..cfe79e773 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/VSACImporter.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/VSACImporter.java @@ -45,10 +45,10 @@ public class VSACImporter extends OIDBasedValueSetImporter { public static void main(String[] args) throws FHIRException, IOException, ParseException, URISyntaxException { VSACImporter self = new VSACImporter(); - self.process(args[0], args[1], args[2], "true".equals(args[3])); + self.process(args[0], args[1], args[2], "true".equals(args[3]), "true".equals(args[4])); } - private void process(String source, String dest, String apiKey, boolean onlyNew) throws FHIRException, IOException, URISyntaxException { + private void process(String source, String dest, String apiKey, boolean onlyNew, boolean onlyActive) throws FHIRException, IOException, URISyntaxException { CSVReader csv = new CSVReader(ManagedFileAccess.inStream(source)); csv.readHeaders(); Map errs = new HashMap<>(); @@ -75,13 +75,20 @@ public class VSACImporter extends OIDBasedValueSetImporter { System.out.println("Loading"); List oids = new ArrayList<>(); + List allOids = new ArrayList<>(); while (csv.line()) { - String oid = csv.cell("OID"); - if (!onlyNew || !(ManagedFileAccess.file(Utilities.path(dest, "ValueSet-" + oid + ".json")).exists())) { - oids.add(oid); + String status = csv.cell("Expansion Status"); + if (!onlyActive || "Active".equals(status)) { + String oid = csv.cell("OID"); + allOids.add(oid); + if (!onlyNew || !(ManagedFileAccess.file(Utilities.path(dest, "ValueSet-" + oid + ".json")).exists())) { + oids.add(oid); + } } } Collections.sort(oids); + System.out.println("Cleaning"); + cleanValueSets(allOids, dest); System.out.println("Go: "+oids.size()+" oids"); int i = 0; int j = 0; @@ -108,6 +115,7 @@ public class VSACImporter extends OIDBasedValueSetImporter { errs.put(oid, e.getMessage()); } } + OperationOutcome oo = new OperationOutcome(); for (String oid : errs.keySet()) { oo.addIssue().setSeverity(IssueSeverity.ERROR).setCode(IssueType.EXCEPTION).setDiagnostics(errs.get(oid)).addLocation(oid); @@ -116,6 +124,22 @@ public class VSACImporter extends OIDBasedValueSetImporter { System.out.println("Done. " + i + " ValueSets in "+Utilities.describeDuration(System.currentTimeMillis() - tt)); } + private void cleanValueSets(List allOids, String dest) throws IOException { + cleanValueSets(allOids, new File(Utilities.path(dest))); + } + + private void cleanValueSets(List allOids, File file) { + for (File f : file.listFiles()) { + if (f.getName().startsWith("ValueSet-")) { + String oid = f.getName().substring(9).replace(".json", ""); + if (!allOids.contains(oid)) { + f.delete(); + } + } + } + + } + private long estimate(int i, int size, long tt) { long elapsed = System.currentTimeMillis() - tt; long average = elapsed / i; @@ -201,7 +225,7 @@ public class VSACImporter extends OIDBasedValueSetImporter { } vs.setName(makeValidName(vs.getName())); JurisdictionUtilities.setJurisdictionCountry(vs.getJurisdiction(), "US"); - new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(ManagedFileAccess.outStream(Utilities.path(dest, "ValueSet-" + oid + ".json")), vs); + new JsonParser().setOutputStyle(OutputStyle.NORMAL).compose(ManagedFileAccess.outStream(Utilities.path(dest, "ValueSet-" + oid + ".json")), vs); return true; } } From fedf7e9e6dd60dc94764e02d5871bc24d5e9f27f Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sun, 22 Sep 2024 06:39:28 -0400 Subject: [PATCH 34/68] Add more debugging to validation failure --- .../fhir/r5/context/BaseWorkerContext.java | 6 +-- .../TerminologyOperationContext.java | 11 +++-- .../hl7/fhir/utilities/npm/PackageHacker.java | 40 ++++++++++++++++++- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java index e33cc0bfa..001aad87f 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java @@ -1471,15 +1471,15 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte } protected ValueSetExpander constructValueSetExpanderSimple(ValidationOptions options) { - return new ValueSetExpander(this, new TerminologyOperationContext(this, options)).setDebug(logger.isDebugLogging()); + return new ValueSetExpander(this, new TerminologyOperationContext(this, options, "expansion")).setDebug(logger.isDebugLogging()); } protected ValueSetValidator constructValueSetCheckerSimple(ValidationOptions options, ValueSet vs, ValidationContextCarrier ctxt) { - return new ValueSetValidator(this, new TerminologyOperationContext(this, options), options, vs, ctxt, expParameters, terminologyClientManager); + return new ValueSetValidator(this, new TerminologyOperationContext(this, options, "validation"), options, vs, ctxt, expParameters, terminologyClientManager); } protected ValueSetValidator constructValueSetCheckerSimple( ValidationOptions options, ValueSet vs) { - return new ValueSetValidator(this, new TerminologyOperationContext(this, options), options, vs, expParameters, terminologyClientManager); + return new ValueSetValidator(this, new TerminologyOperationContext(this, options, "validation"), options, vs, expParameters, terminologyClientManager); } protected Parameters constructParameters(TerminologyClientContext tcd, ValueSet vs, boolean hierarchical) { diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java index a9632ede9..9b36437e5 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java @@ -42,12 +42,14 @@ public class TerminologyOperationContext { private IWorkerContext worker; private boolean original; private ValidationOptions options; + private String name; - public TerminologyOperationContext(IWorkerContext worker, ValidationOptions options) { + public TerminologyOperationContext(IWorkerContext worker, ValidationOptions options, String name) { super(); this.worker = worker; this.original = true; this.options = options; + this.name = name; if (EXPANSION_DEAD_TIME_SECS == 0 || debugging) { deadTime = 0; @@ -56,13 +58,14 @@ public class TerminologyOperationContext { } } - private TerminologyOperationContext(ValidationOptions options) { + private TerminologyOperationContext(ValidationOptions options, String name) { super(); this.options = options; + this.name = name; } public TerminologyOperationContext copy() { - TerminologyOperationContext ret = new TerminologyOperationContext(this.options); + TerminologyOperationContext ret = new TerminologyOperationContext(this.options, name); ret.worker = worker; ret.contexts.addAll(contexts); ret.deadTime = deadTime; @@ -71,7 +74,7 @@ public class TerminologyOperationContext { public void deadCheck() { if (deadTime != 0 && System.currentTimeMillis() > deadTime) { - throw new TerminologyServiceProtectionException(worker.formatMessage(I18nConstants.VALUESET_TOO_COSTLY_TIME, contexts.get(0), EXPANSION_DEAD_TIME_SECS), TerminologyServiceErrorClass.TOO_COSTLY, IssueType.TOOCOSTLY); + throw new TerminologyServiceProtectionException(worker.formatMessage(I18nConstants.VALUESET_TOO_COSTLY_TIME, contexts.get(0), EXPANSION_DEAD_TIME_SECS, name), TerminologyServiceErrorClass.TOO_COSTLY, IssueType.TOOCOSTLY); } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java index 225bdd409..05e7e94c4 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java @@ -12,6 +12,7 @@ import java.util.Map; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; +import org.hl7.fhir.utilities.VersionUtilities; import org.hl7.fhir.utilities.filesystem.ManagedFileAccess; import org.hl7.fhir.utilities.json.model.JsonArray; import org.hl7.fhir.utilities.json.model.JsonObject; @@ -43,7 +44,44 @@ public class PackageHacker { // new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/6.0.0-ballot2/hl7.fhir.r6.search.tgz"); // new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/us/core/v311/package.tgz", "http://hl7.org/fhir/us/core/STU3.1.1"); - new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/us/core/v700/package.tgz", "http://hl7.org/fhir/us/core/STU7"); + // new PackageHacker().edit("/Users/grahamegrieve/web/hl7.org/fhir/us/core/v700/package.tgz", "http://hl7.org/fhir/us/core/STU7"); + + PackageHacker self = new PackageHacker(); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/1.0.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/1.0.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/2.0.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/2.0.0/hl7.terminology.r4b.tgz"); + self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/2.1.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/2.1.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/3.0.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/3.0.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/3.1.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/3.1.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/4.0.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/4.0.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/5.0.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/5.0.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/5.1.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/5.1.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/5.2.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/5.2.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/5.3.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/5.3.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/5.4.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/5.4.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/5.5.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/5.5.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/6.0.0/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/6.0.0/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/6.0.1/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/6.0.1/hl7.terminology.r4b.tgz"); +// self.cloneToR4B("/Users/grahamegrieve/web/terminology.hl7.org/6.0.2/hl7.terminology.r4.tgz", "/Users/grahamegrieve/web/terminology.hl7.org/6.0.2/hl7.terminology.r4b.tgz"); + } + + private void cloneToR4B(String src, String dst) throws IOException { + FileInputStream fs = ManagedFileAccess.inStream(src); + NpmPackage pck = NpmPackage.fromPackage(fs); + System.out.println(nice(pck.getNpm())); + JsonObject json = pck.getNpm(); + String name = json.asString("name"); + json.remove("name"); + json.add("name", name.replace(".r4", ".r4b")); + json.remove("fhirVersions"); + json.remove("dependencies"); + JsonArray fv = new JsonArray(); + json.add("fhirVersions", fv); + fv.add("4.3.0"); + JsonObject dep = new JsonObject(); + json.add("dependencies", dep); + dep.add(VersionUtilities.packageForVersion("4.3.0"), "4.3.0"); + pck.save(new FileOutputStream(dst)); } // private void massEdit(File dir) throws IOException { From 3cec1893336c9205c1e8b243b0591d3ef8bd9bb3 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sun, 22 Sep 2024 06:40:15 -0400 Subject: [PATCH 35/68] Fix id/idref to resolve in document if in a document --- .../src/main/resources/Messages.properties | 2 +- .../hl7/fhir/validation/BaseValidator.java | 28 +++ .../instance/InstanceValidator.java | 45 ++-- .../4.0.1/snomed.cache | 193 +++--------------- ...uvipsCodeSystemabsent-unknown-uv-ips.cache | 42 ++++ 5 files changed, 122 insertions(+), 188 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages.properties b/org.hl7.fhir.utilities/src/main/resources/Messages.properties index f5b5c2782..aa8a725c8 100644 --- a/org.hl7.fhir.utilities/src/main/resources/Messages.properties +++ b/org.hl7.fhir.utilities/src/main/resources/Messages.properties @@ -1031,7 +1031,7 @@ VALUESET_SUPPLEMENT_MISSING_one = Required supplement not found: {1} VALUESET_SUPPLEMENT_MISSING_other = Required supplements not found: {1} VALUESET_TOO_COSTLY = The value set ''{0}'' expansion has too many codes to display ({1}) VALUESET_TOO_COSTLY_COUNT = The value set ''{0}'' expansion has {2} codes, which is too many to display ({1}) -VALUESET_TOO_COSTLY_TIME = The value set ''{0}'' expansion took too long to process (>{1}sec) +VALUESET_TOO_COSTLY_TIME = The value set ''{0}'' {2} took too long to process (>{1}sec) VALUESET_UNC_SYSTEM_WARNING = Unknown System ''{0}'' specified, so Concepts and Filters can''t be checked (Details: {1}) VALUESET_UNC_SYSTEM_WARNING_VER = Unknown System/Version ''{0}'' specified, so Concepts and Filters can''t be checked (Details: {1}) VALUESET_UNKNOWN_FILTER_PROPERTY = The property ''{0}'' is not known for the system ''{1}'', so may not be understood by the terminology ecosystem. Known properties for this system: {2} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java index cee1ebf8f..13b4304ca 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java @@ -1192,6 +1192,34 @@ public class BaseValidator implements IValidationContextResourceLoader, IMessagi } + protected int countFragmentMatches(Element element, String fragment, NodeStack stack) { + int count = countFragmentMatches(element, fragment); + if (count == 0 && element.isResource() && element.hasParentForValidator()) { + Element bnd = getElementBundle(element); + if (bnd != null) { + // in this case, we look into the parent - if there is one - and if it's a bundle, we look at the entries (but not in them) + for (Element be : bnd.getChildrenByName("entry")) { + String id = be.getIdBase(); + if (fragment.equals(id)) { + count++; + } + } + } + } + return count; + } + + private Element getElementBundle(Element element) { + Element p = element.getParentForValidator(); + if (p != null) { + Element b = p.getParentForValidator(); + if (b != null && b.fhirType().equals("Bundle")) { + return b; + } + } + return null; + } + protected int countFragmentMatches(Element element, String fragment) { int count = 0; if (fragment.equals(element.getIdBase())) { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java index 03d4e1cdd..e84005747 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java @@ -3193,7 +3193,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat // check that no illegal elements and attributes have been used ok = checkInnerNames(errors, e, path, xhtml.getChildNodes(), false) && ok; ok = checkUrls(errors, e, path, xhtml.getChildNodes()) && ok; - ok = checkIdRefs(errors, e, path, xhtml, resource) && ok; + ok = checkIdRefs(errors, e, path, xhtml, resource, node) && ok; if (true) { ok = checkReferences(valContext, errors, e, path, "div", xhtml, resource) && ok; } @@ -3642,11 +3642,11 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat return ok; } - private boolean checkIdRefs(List errors, Element e, String path, XhtmlNode node, Element resource) { + private boolean checkIdRefs(List errors, Element e, String path, XhtmlNode node, Element resource, NodeStack stack) { boolean ok = true; if (node.getNodeType() == NodeType.Element && node.getAttribute("idref") != null) { String idref = node.getAttribute("idref"); - int count = countFragmentMatches(resource, idref); + int count = countFragmentMatches(resource, idref, stack); if (count == 0) { ok = warning(errors, "2023-12-01", IssueType.INVALID, e.line(), e.col(), path, idref == null, I18nConstants.XHTML_IDREF_NOT_FOUND, idref) && ok; } else if (count > 1) { @@ -3655,7 +3655,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat } if (node.hasChildren()) { for (XhtmlNode child : node.getChildNodes()) { - checkIdRefs(errors, e, path, child, resource); + checkIdRefs(errors, e, path, child, resource, stack); } } return ok; @@ -6067,20 +6067,22 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat Element div = text.getNamedChild("div", false); if (lang != null && div != null) { XhtmlNode xhtml = div.getXhtml(); - String l = xhtml.getAttribute("lang"); - String xl = xhtml.getAttribute("xml:lang"); - if (l == null && xl == null) { - warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_MISSING1); - } else { - if (l == null) { - warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_MISSING2); - } else if (!l.equals(lang)) { - warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_DIFFERENT1, lang, l); - } - if (xl == null) { - warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_MISSING3); - } else if (!xl.equals(lang)) { - warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_DIFFERENT2, lang, xl); + if (xhtml != null) { + String l = xhtml.getAttribute("lang"); + String xl = xhtml.getAttribute("xml:lang"); + if (l == null && xl == null) { + warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_MISSING1); + } else { + if (l == null) { + warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_MISSING2); + } else if (!l.equals(lang)) { + warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_DIFFERENT1, lang, l); + } + if (xl == null) { + warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_MISSING3); + } else if (!xl.equals(lang)) { + warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, div.line(), div.col(), stack.getLiteralPath(), false, I18nConstants.LANGUAGE_XHTML_LANG_DIFFERENT2, lang, xl); + } } } } @@ -7615,6 +7617,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat } + public long timeNoTX() { + return (timeTracker.getOverall() - timeTracker.getTxTime()) / 1000000; + } public String reportTimes() { String s = String.format("Times (ms): overall = %d:4, tx = %d, sd = %d, load = %d, fpe = %d, spec = %d", timeTracker.getOverall() / 1000000, timeTracker.getTxTime() / 1000000, timeTracker.getSdTime() / 1000000, timeTracker.getLoadTime() / 1000000, timeTracker.getFpeTime() / 1000000, timeTracker.getSpecTime() / 1000000); timeTracker.reset(); @@ -8028,6 +8033,10 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat public void setNoExperimentalContent(boolean noExperimentalContent) { this.noExperimentalContent = noExperimentalContent; } + + public void resetTimes() { + timeTracker.reset(); + } } diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/snomed.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/snomed.cache index 6744fe382..336ec053b 100644 --- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/snomed.cache +++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/snomed.cache @@ -9387,7 +9387,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9411,7 +9410,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9435,7 +9433,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9459,7 +9456,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9482,7 +9478,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9506,7 +9501,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9533,7 +9527,6 @@ v: { "error" : "Wrong Display Name 'Moderate' for http://snomed.info/sct#6736007. Valid display is one of 4 choices: 'Midgrade', 'Moderate (severity modifier) (qualifier value)', 'Moderate (severity modifier)' or 'Moderate severity' (for the language(s) 'en-US')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -9573,7 +9566,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9597,7 +9589,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9621,7 +9612,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9645,7 +9635,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9669,7 +9658,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9693,7 +9681,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9717,7 +9704,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9741,7 +9727,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9765,7 +9750,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9790,7 +9774,6 @@ v: { "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", "inactive" : true, - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9814,7 +9797,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9838,7 +9820,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9862,7 +9843,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9886,7 +9866,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9910,7 +9889,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9934,7 +9912,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9958,7 +9935,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -9982,7 +9958,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10006,7 +9981,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10031,7 +10005,6 @@ v: { "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", "inactive" : true, - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10058,7 +10031,6 @@ v: { "error" : "Wrong Display Name 'Traveller's Diarrhea (disorder)' for http://snomed.info/sct#11840006. Valid display is one of 4 choices: 'Traveler's diarrhea', 'Turista', 'Traveler's diarrhoea' or 'Traveler's diarrhea (disorder)' (for the language(s) 'en-US')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -10099,7 +10071,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10123,7 +10094,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10147,7 +10117,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10171,7 +10140,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10196,7 +10164,6 @@ v: { "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", "inactive" : true, - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10221,7 +10188,6 @@ v: { "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", "inactive" : true, - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10245,7 +10211,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10269,7 +10234,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10294,7 +10258,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/731000124108/version/20240301", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10321,7 +10284,6 @@ v: { "error" : "Wrong Display Name 'Progress note' for http://snomed.info/sct#371532007. Valid display is one of 3 choices: 'Progress report', 'Report of subsequent visit' or 'Progress report (record artifact)' (for the language(s) 'en-US')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -10362,7 +10324,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10385,7 +10346,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10408,7 +10368,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10432,7 +10391,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10456,7 +10414,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10480,7 +10437,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10504,7 +10460,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10528,7 +10483,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10552,7 +10506,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10579,7 +10532,6 @@ v: { "error" : "A definition for CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/11000146104/version/20220930' could not be found, so the code cannot be validated. Valid versions: [http://snomed.info/sct/11000146104/version/20230331,http://snomed.info/sct/11000172109/version/20231115,http://snomed.info/sct/2011000195101/version/20230607,http://snomed.info/sct/20611000087101/version/20220930,http://snomed.info/sct/32506021000036107/version/20230731,http://snomed.info/sct/45991000052106/version/20220531,http://snomed.info/sct/45991000052106/version/20231130,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20240301,http://snomed.info/sct/827022005/version/20221130,http://snomed.info/sct/83821000000107/version/20230412,http://snomed.info/sct/900000000000207008/version/20230131,http://snomed.info/sct/900000000000207008/version/20230731,http://snomed.info/sct/900000000000207008/version/20240201]", "class" : "CODESYSTEM_UNSUPPORTED_VERSION", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -10624,7 +10576,6 @@ v: { "error" : "No Message returned", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -10665,7 +10616,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10689,7 +10639,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10713,7 +10662,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10737,7 +10685,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10763,7 +10710,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#96067005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/allergy-intolerance-substance-condition-uv-ips--0|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -10803,7 +10749,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10827,7 +10772,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10853,7 +10797,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#292954005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/allergy-reaction-snomed-ct-ips-free-set--0|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -10894,7 +10837,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10920,7 +10862,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#48546005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/allergy-intolerance-substance-condition-uv-ips--0|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -10960,7 +10901,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -10984,7 +10924,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11010,7 +10949,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#292360004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/allergy-reaction-snomed-ct-ips-free-set--0|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -11051,7 +10989,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11074,7 +11011,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11098,7 +11034,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11121,7 +11056,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11145,7 +11079,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11168,7 +11101,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11192,7 +11124,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11215,7 +11146,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11239,7 +11169,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11262,7 +11191,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11286,7 +11214,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11309,7 +11236,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11333,7 +11259,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11356,7 +11281,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11382,7 +11306,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#126212009' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -11423,7 +11346,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11446,7 +11368,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11470,7 +11391,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11493,7 +11413,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11519,7 +11438,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#714081009' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -11560,7 +11478,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11583,7 +11500,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11609,7 +11525,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#109081006' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -11650,7 +11565,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11673,7 +11587,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11697,7 +11610,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11720,7 +11632,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11746,7 +11657,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#108537001' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -11787,7 +11697,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11810,7 +11719,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11836,7 +11744,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#96309000' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -11877,7 +11784,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11900,7 +11806,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11926,7 +11831,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#7947003' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -11967,7 +11871,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -11990,7 +11893,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12016,7 +11918,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#25246002' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/medication-snomed-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12057,7 +11958,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12080,7 +11980,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12104,7 +12003,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12127,7 +12025,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12153,7 +12050,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#265132005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12196,7 +12092,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#265132005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--2|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12239,7 +12134,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#265132005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--3|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12282,7 +12176,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#265132005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--4|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12325,7 +12218,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#265132005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--5|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12368,7 +12260,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#265132005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--6|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12411,7 +12302,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#265132005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--7|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12454,7 +12344,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#265132005' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--8|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12495,7 +12384,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12518,7 +12406,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12544,7 +12431,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#287903004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--1|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12587,7 +12473,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#287903004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--2|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12630,7 +12515,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#287903004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--3|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12673,7 +12557,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#287903004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--4|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12716,7 +12599,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#287903004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--5|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12759,7 +12641,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#287903004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--6|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12802,7 +12683,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#287903004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--7|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12845,7 +12725,6 @@ v: { "error" : "The provided code 'http://snomed.info/sct#287903004' was not found in the value set 'http://hl7.org/fhir/uv/ips/ValueSet/procedures-uv-ips--8|1.1.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -12886,7 +12765,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12910,7 +12788,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12934,7 +12811,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12958,7 +12834,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -12982,7 +12857,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13009,7 +12883,6 @@ v: { "error" : "Wrong Display Name 'COVID-19' for http://snomed.info/sct#840535000. Valid display is one of 7 choices: 'Antibody to 2019 novel coronavirus', 'Antibody to 2019-nCoV', 'Antibody to severe acute respiratory syndrome coronavirus 2 (substance)', 'Antibody to severe acute respiratory syndrome coronavirus 2', 'Antibody to SARS-CoV-2', 'Severe acute respiratory syndrome coronavirus 2 Ab' or 'Severe acute respiratory syndrome coronavirus 2 antibody' (for the language(s) 'en-US')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13050,7 +12923,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13074,7 +12946,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13098,7 +12969,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13123,7 +12993,6 @@ v: { "error" : "Unknown code '10821000202101' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13167,7 +13036,6 @@ v: { "error" : "Wrong Display Name 'Diagnostisk med biopsi' for http://snomed.info/sct#446745002. Valid display is one of 2 choices: 'Colonoscopy and biopsy of colon (procedure)' or 'Colonoscopy and biopsy of colon' (for the language(s) 'en-US')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13208,7 +13076,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13233,7 +13100,6 @@ v: { "error" : "Unknown code '8921000202108' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13275,7 +13141,6 @@ v: { "error" : "Unknown code '8951000202101' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13316,7 +13181,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13341,7 +13205,6 @@ v: { "error" : "Unknown code '10291000202102' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13382,7 +13245,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13407,7 +13269,6 @@ v: { "error" : "Unknown code '8901000202102' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13448,7 +13309,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13473,7 +13333,6 @@ v: { "error" : "Unknown code '8911000202100' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13514,7 +13373,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13539,7 +13397,6 @@ v: { "error" : "Unknown code '8891000202103' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13580,7 +13437,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13603,7 +13459,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13628,7 +13483,6 @@ v: { "error" : "Unknown code '15991000202102' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13669,7 +13523,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13693,7 +13546,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13717,7 +13569,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13744,7 +13595,6 @@ v: { "error" : "A definition for CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20210731' could not be found, so the code cannot be validated. Valid versions: [http://snomed.info/sct/11000146104/version/20230331,http://snomed.info/sct/11000172109/version/20231115,http://snomed.info/sct/2011000195101/version/20230607,http://snomed.info/sct/20611000087101/version/20220930,http://snomed.info/sct/32506021000036107/version/20230731,http://snomed.info/sct/45991000052106/version/20220531,http://snomed.info/sct/45991000052106/version/20231130,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20240301,http://snomed.info/sct/827022005/version/20221130,http://snomed.info/sct/83821000000107/version/20230412,http://snomed.info/sct/900000000000207008/version/20230131,http://snomed.info/sct/900000000000207008/version/20230731,http://snomed.info/sct/900000000000207008/version/20240201]", "class" : "CODESYSTEM_UNSUPPORTED_VERSION", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13788,7 +13638,6 @@ v: { "error" : "A definition for CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20210731' could not be found, so the code cannot be validated. Valid versions: [http://snomed.info/sct/11000146104/version/20230331,http://snomed.info/sct/11000172109/version/20231115,http://snomed.info/sct/2011000195101/version/20230607,http://snomed.info/sct/20611000087101/version/20220930,http://snomed.info/sct/32506021000036107/version/20230731,http://snomed.info/sct/45991000052106/version/20220531,http://snomed.info/sct/45991000052106/version/20231130,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20240301,http://snomed.info/sct/827022005/version/20221130,http://snomed.info/sct/83821000000107/version/20230412,http://snomed.info/sct/900000000000207008/version/20230131,http://snomed.info/sct/900000000000207008/version/20230731,http://snomed.info/sct/900000000000207008/version/20240201]", "class" : "CODESYSTEM_UNSUPPORTED_VERSION", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13832,7 +13681,6 @@ v: { "error" : "A definition for CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20210731' could not be found, so the code cannot be validated. Valid versions: [http://snomed.info/sct/11000146104/version/20230331,http://snomed.info/sct/11000172109/version/20231115,http://snomed.info/sct/2011000195101/version/20230607,http://snomed.info/sct/20611000087101/version/20220930,http://snomed.info/sct/32506021000036107/version/20230731,http://snomed.info/sct/45991000052106/version/20220531,http://snomed.info/sct/45991000052106/version/20231130,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20240301,http://snomed.info/sct/827022005/version/20221130,http://snomed.info/sct/83821000000107/version/20230412,http://snomed.info/sct/900000000000207008/version/20230131,http://snomed.info/sct/900000000000207008/version/20230731,http://snomed.info/sct/900000000000207008/version/20240201]; Unable to check whether the code is in the value set 'https://fhir.kbv.de/ValueSet/KBV_VS_Base_Body_Weight_Snomed|1.2.1' because the code system http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20210731 was not found", "class" : "CODESYSTEM_UNSUPPORTED_VERSION", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -13888,7 +13736,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13912,7 +13759,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13936,7 +13782,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13959,7 +13804,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -13983,7 +13827,6 @@ v: { "error" : "Unknown code '276885007x' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -14041,7 +13884,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -14064,7 +13906,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -14087,7 +13928,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -14112,7 +13952,6 @@ v: { "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", "inactive" : true, - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -14139,7 +13978,6 @@ v: { "error" : "A definition for CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20210331' could not be found, so the code cannot be validated. Valid versions: [http://snomed.info/sct/11000146104/version/20230331,http://snomed.info/sct/11000172109/version/20231115,http://snomed.info/sct/2011000195101/version/20230607,http://snomed.info/sct/20611000087101/version/20220930,http://snomed.info/sct/32506021000036107/version/20230731,http://snomed.info/sct/45991000052106/version/20220531,http://snomed.info/sct/45991000052106/version/20231130,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20240301,http://snomed.info/sct/827022005/version/20221130,http://snomed.info/sct/83821000000107/version/20230412,http://snomed.info/sct/900000000000207008/version/20230131,http://snomed.info/sct/900000000000207008/version/20230731,http://snomed.info/sct/900000000000207008/version/20240201]", "class" : "CODESYSTEM_UNSUPPORTED_VERSION", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -14183,7 +14021,6 @@ v: { "error" : "A definition for CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/11000146104/version/20220930' could not be found, so the code cannot be validated. Valid versions: [http://snomed.info/sct/11000146104/version/20230331,http://snomed.info/sct/11000172109/version/20231115,http://snomed.info/sct/2011000195101/version/20230607,http://snomed.info/sct/20611000087101/version/20220930,http://snomed.info/sct/32506021000036107/version/20230731,http://snomed.info/sct/45991000052106/version/20220531,http://snomed.info/sct/45991000052106/version/20231130,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20240301,http://snomed.info/sct/827022005/version/20221130,http://snomed.info/sct/83821000000107/version/20230412,http://snomed.info/sct/900000000000207008/version/20230131,http://snomed.info/sct/900000000000207008/version/20230731,http://snomed.info/sct/900000000000207008/version/20240201]", "class" : "CODESYSTEM_UNSUPPORTED_VERSION", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -14227,7 +14064,6 @@ v: { "error" : "Wrong Display Name 'Paracetamol 500mg tablets' for http://snomed.info/sct#322236009. Valid display is one of 3 choices: 'Acetaminophen 500 mg oral tablet', 'Paracetamol 500 mg oral tablet' or 'Product containing precisely paracetamol 500 milligram/1 each conventional release oral tablet (clinical drug)' (for the language(s) 'en-US')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -14269,7 +14105,6 @@ v: { "error" : "Unknown code '35901911000001104' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -14309,7 +14144,6 @@ v: { "system" : "http://snomed.info/sct", "version" : "http://snomed.info/sct/900000000000207008/version/20240201", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -14336,7 +14170,6 @@ v: { "error" : "Wrong Display Name 'Ibuprofen 200mg tablets' for http://snomed.info/sct#329652003. Valid display is one of 2 choices: 'Ibuprofen 200 mg oral tablet' or 'Product containing precisely ibuprofen 200 milligram/1 each conventional release oral tablet (clinical drug)' (for the language(s) 'en-US')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -14378,7 +14211,6 @@ v: { "error" : "Unknown code '39695211000001102' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -14420,7 +14252,6 @@ v: { "error" : "Unknown code '56248011000036107' in the CodeSystem 'http://snomed.info/sct' version 'http://snomed.info/sct/900000000000207008/version/20240201'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -14444,3 +14275,27 @@ v: { } ------------------------------------------------------------------------------------- +{"code" : { + "system" : "http://snomed.info/sct", + "code" : "72098002", + "display" : "Entire left upper arm" +}, "valueSet" :null, "langs":"en-NZ", "useServer":"true", "useClient":"false", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": { + "resourceType" : "Parameters", + "parameter" : [{ + "name" : "profile-url", + "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891" + }] +}}#### +v: { + "display" : "Entire left upper arm", + "code" : "72098002", + "system" : "http://snomed.info/sct", + "version" : "http://snomed.info/sct/900000000000207008/version/20240201", + "server" : "http://tx-dev.fhir.org/r4", + "unknown-systems" : "", + "issues" : { + "resourceType" : "OperationOutcome" +} + +} +------------------------------------------------------------------------------------- diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/uvipsCodeSystemabsent-unknown-uv-ips.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/uvipsCodeSystemabsent-unknown-uv-ips.cache index 1b8a5623c..084d88618 100644 --- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/uvipsCodeSystemabsent-unknown-uv-ips.cache +++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/uvipsCodeSystemabsent-unknown-uv-ips.cache @@ -82,3 +82,45 @@ v: { } ------------------------------------------------------------------------------------- +{"code" : { + "system" : "http://hl7.org/fhir/uv/ips/CodeSystem/absent-unknown-uv-ips", + "code" : "no-allergy-info", + "display" : "No information about allergies" +}, "valueSet" :null, "langs":"en-NZ", "useServer":"true", "useClient":"false", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"false", "displayWarningMode":"false", "versionFlexible":"false", "profile": { + "resourceType" : "Parameters", + "parameter" : [{ + "name" : "profile-url", + "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891" + }] +}}#### +v: { + "code" : "no-allergy-info", + "system" : "http://hl7.org/fhir/uv/ips/CodeSystem/absent-unknown-uv-ips", + "severity" : "error", + "error" : "A definition for CodeSystem 'http://hl7.org/fhir/uv/ips/CodeSystem/absent-unknown-uv-ips' could not be found, so the code cannot be validated", + "class" : "CODESYSTEM_UNSUPPORTED", + "server" : "http://tx-dev.fhir.org/r4", + "unknown-systems" : "http://hl7.org/fhir/uv/ips/CodeSystem/absent-unknown-uv-ips", + "issues" : { + "resourceType" : "OperationOutcome", + "issue" : [{ + "extension" : [{ + "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server", + "valueUrl" : "http://tx-dev.fhir.org/r4" + }], + "severity" : "error", + "code" : "not-found", + "details" : { + "coding" : [{ + "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type", + "code" : "not-found" + }], + "text" : "A definition for CodeSystem 'http://hl7.org/fhir/uv/ips/CodeSystem/absent-unknown-uv-ips' could not be found, so the code cannot be validated" + }, + "location" : ["Coding.system"], + "expression" : ["Coding.system"] + }] +} + +} +------------------------------------------------------------------------------------- From 7bafd6e3c8f9927d71a2701dabdf624d49386fa0 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sun, 22 Sep 2024 06:40:27 -0400 Subject: [PATCH 36/68] remove debugging code --- .../validation/instance/type/StructureDefinitionValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java index db777b0c3..30bbdb9af 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java @@ -191,7 +191,7 @@ public class StructureDefinitionValidator extends BaseValidator { } } } catch (Exception e) { - e.printStackTrace(); + //e.printStackTrace(); rule(errors, NO_RULE_DATE, IssueType.EXCEPTION, stack.getLiteralPath(), false, I18nConstants.ERROR_GENERATING_SNAPSHOT, e.getMessage()); ok = false; } From 546659521593840526b995dee9802e50aed9fefb Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sun, 22 Sep 2024 06:41:38 -0400 Subject: [PATCH 37/68] Work around problem with language value set being marked experimental --- .../src/main/java/org/hl7/fhir/r5/utils/PackageHackerR5.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/PackageHackerR5.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/PackageHackerR5.java index 5ea179634..376afc72b 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/PackageHackerR5.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/PackageHackerR5.java @@ -36,6 +36,10 @@ public class PackageHackerR5 { r.hack("http://terminology.hl7.org/CodeSystem/v2-0360-2.3.1", "2.3.1"); } + if ("http://hl7.org/fhir/ValueSet/languages".equals(r.getUrl())) { + r.getResource().setExperimental(false); + } + if ("http://hl7.org/fhir/StructureDefinition/iso21090-nullFlavor".equals(r.getUrl()) && "4.0.1".equals(r.getVersion())) { StructureDefinition sd = (StructureDefinition) r.getResource(); for (ElementDefinition ed : sd.getSnapshot().getElement()) { From bf63eb42faf09afbe3305985a88d81a472ad3b8e Mon Sep 17 00:00:00 2001 From: markiantorno Date: Sun, 22 Sep 2024 12:17:22 +0000 Subject: [PATCH 38/68] Updating i18n-coverage csv and png table ***NO_CI*** --- i18n-coverage-table.png | Bin 31259 -> 31013 bytes i18n-coverage.csv | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n-coverage-table.png b/i18n-coverage-table.png index e3f25dc2dce82da4083f7e944f91d22eb0c5c443..7bfd3230cc6a838ad070caae76e08df8a7a89f92 100644 GIT binary patch literal 31013 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 literal 31259 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 X+Kh3o+KE~wN#n;(F+FQyx8Z*PM(9Cy diff --git a/i18n-coverage.csv b/i18n-coverage.csv index bf44bb436..c6da69090 100644 --- a/i18n-coverage.csv +++ b/i18n-coverage.csv @@ -2,4 +2,4 @@ Locale,Coverage #,Coverage % de,831,40% es,714,35% ja,902,44% -nl,1989,98% +nl,1988,97% From c143f7adffcd433a31fb60d878262279287d5d61 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sun, 22 Sep 2024 11:24:30 -0400 Subject: [PATCH 39/68] bug fix on snapshot generation after testing --- RELEASE_NOTES.md | 14 ++++++++++++-- .../r5/conformance/profile/ProfileUtilities.java | 1 + .../r5/utils/formats/XmlLocationAnnotator.java | 9 +++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 7b06c6ab5..923dfa02c 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,7 +1,17 @@ ## Validator Changes -* no changes +* Work around problem with language value set being marked experimental +* Fix validation id/idref to resolve in document if in a document +* Fix various issues rendering and validating additional bindings with usage contexts +* Upgrade lock management in Package Cache ## Other code changes -* no changes \ No newline at end of file +* Fix case typo on Consent.provision in R4 +* Fix R3 Quantity.copyValues() +* Remove debugging code +* Add more debugging to validation failure +* Add support for active only to VSAC importer +* Add r4b support to Package Version Generation +* Fix argument confusion in format in time validation + diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java index e8f3441b4..8c3f2a3e7 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java @@ -4579,6 +4579,7 @@ public class ProfileUtilities { public void setMessages(List messages) { if (messages != null) { this.messages = messages; + wantThrowExceptions = false; } } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java index 0a751ee2c..87ee99795 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java @@ -44,6 +44,8 @@ import org.w3c.dom.events.MutationEvent; import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.LocatorImpl; import org.xml.sax.helpers.XMLFilterImpl; @@ -71,6 +73,13 @@ public class XmlLocationAnnotator extends XMLFilterImpl { ((EventTarget) dom).addEventListener("DOMNodeInserted", modListener, true); } + @Override + public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException { + if (!name.equals("http://javax.xml.xmlconstants/property/accessExternalDTD")) { + super.setProperty(name, value); + } + } + @Override public void setDocumentLocator(Locator locator) { super.setDocumentLocator(locator); From 8f865285265be26b6d0a9acb48a1c8677e898270 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sun, 22 Sep 2024 11:51:25 -0400 Subject: [PATCH 40/68] set up release --- RELEASE_NOTES.md | 1 + pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 923dfa02c..b009d0402 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -14,4 +14,5 @@ * Add support for active only to VSAC importer * Add r4b support to Package Version Generation * Fix argument confusion in format in time validation +* Added support for tracking whether elements are ellipsed and for rendering accordingly diff --git a/pom.xml b/pom.xml index 883b784e5..c5944e673 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.23-SNAPSHOT + 1.5.23 2.17.0 5.9.2 1.8.2 From 102e7552832d148c7a7cd0c127a7a081927a5c15 Mon Sep 17 00:00:00 2001 From: markiantorno Date: Sun, 22 Sep 2024 17:51:33 +0000 Subject: [PATCH 41/68] Release: v6.3.27 ## Validator Changes * Work around problem with language value set being marked experimental * Fix validation id/idref to resolve in document if in a document * Fix various issues rendering and validating additional bindings with usage contexts * Upgrade lock management in Package Cache ## Other code changes * Fix case typo on Consent.provision in R4 * Fix R3 Quantity.copyValues() * Remove debugging code * Add more debugging to validation failure * Add support for active only to VSAC importer * Add r4b support to Package Version Generation * Fix argument confusion in format in time validation * Added support for tracking whether elements are ellipsed and for rendering accordingly ***NO_CI*** --- org.hl7.fhir.convertors/pom.xml | 2 +- org.hl7.fhir.dstu2/pom.xml | 2 +- org.hl7.fhir.dstu2016may/pom.xml | 2 +- org.hl7.fhir.dstu3/pom.xml | 2 +- org.hl7.fhir.r4/pom.xml | 2 +- org.hl7.fhir.r4b/pom.xml | 2 +- org.hl7.fhir.r5/pom.xml | 2 +- org.hl7.fhir.report/pom.xml | 2 +- org.hl7.fhir.utilities/pom.xml | 2 +- org.hl7.fhir.validation.cli/pom.xml | 2 +- org.hl7.fhir.validation/pom.xml | 2 +- pom.xml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml index 954879875..28e9ceda8 100644 --- a/org.hl7.fhir.convertors/pom.xml +++ b/org.hl7.fhir.convertors/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml index 0f35fa8bd..0180b572b 100644 --- a/org.hl7.fhir.dstu2/pom.xml +++ b/org.hl7.fhir.dstu2/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml index 73f375a3b..ee0b64319 100644 --- a/org.hl7.fhir.dstu2016may/pom.xml +++ b/org.hl7.fhir.dstu2016may/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml index cf607fb20..8a6413fdd 100644 --- a/org.hl7.fhir.dstu3/pom.xml +++ b/org.hl7.fhir.dstu3/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml index 5dcc8666b..f80b85bd0 100644 --- a/org.hl7.fhir.r4/pom.xml +++ b/org.hl7.fhir.r4/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml index aec9ce8e4..350282aba 100644 --- a/org.hl7.fhir.r4b/pom.xml +++ b/org.hl7.fhir.r4b/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml index b196a2821..38d9a3ca4 100644 --- a/org.hl7.fhir.r5/pom.xml +++ b/org.hl7.fhir.r5/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml index dda6b248f..731f548c5 100644 --- a/org.hl7.fhir.report/pom.xml +++ b/org.hl7.fhir.report/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml index a2e86d2a1..48f7916c2 100644 --- a/org.hl7.fhir.utilities/pom.xml +++ b/org.hl7.fhir.utilities/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml index de8286041..d08cb64b6 100644 --- a/org.hl7.fhir.validation.cli/pom.xml +++ b/org.hl7.fhir.validation.cli/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml index 19fe4ae82..9cf0fb943 100644 --- a/org.hl7.fhir.validation/pom.xml +++ b/org.hl7.fhir.validation/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 ../pom.xml diff --git a/pom.xml b/pom.xml index c5944e673..91c2f3abe 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ HAPI FHIR --> org.hl7.fhir.core - 6.3.27-SNAPSHOT + 6.3.27 pom From be8944ab9475e5445aadce454dc2f2bfe5090edc Mon Sep 17 00:00:00 2001 From: markiantorno Date: Sun, 22 Sep 2024 18:36:30 +0000 Subject: [PATCH 42/68] Updating version to: 6.3.28-SNAPSHOT and incrementing test cases dependency. --- RELEASE_NOTES.md | 15 ++------------- org.hl7.fhir.convertors/pom.xml | 2 +- org.hl7.fhir.dstu2/pom.xml | 2 +- org.hl7.fhir.dstu2016may/pom.xml | 2 +- org.hl7.fhir.dstu3/pom.xml | 2 +- org.hl7.fhir.r4/pom.xml | 2 +- org.hl7.fhir.r4b/pom.xml | 2 +- org.hl7.fhir.r5/pom.xml | 2 +- org.hl7.fhir.report/pom.xml | 2 +- org.hl7.fhir.utilities/pom.xml | 2 +- org.hl7.fhir.validation.cli/pom.xml | 2 +- org.hl7.fhir.validation/pom.xml | 2 +- pom.xml | 2 +- 13 files changed, 14 insertions(+), 25 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index b009d0402..7b06c6ab5 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,18 +1,7 @@ ## Validator Changes -* Work around problem with language value set being marked experimental -* Fix validation id/idref to resolve in document if in a document -* Fix various issues rendering and validating additional bindings with usage contexts -* Upgrade lock management in Package Cache +* no changes ## Other code changes -* Fix case typo on Consent.provision in R4 -* Fix R3 Quantity.copyValues() -* Remove debugging code -* Add more debugging to validation failure -* Add support for active only to VSAC importer -* Add r4b support to Package Version Generation -* Fix argument confusion in format in time validation -* Added support for tracking whether elements are ellipsed and for rendering accordingly - +* no changes \ No newline at end of file diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml index 28e9ceda8..59d52ca35 100644 --- a/org.hl7.fhir.convertors/pom.xml +++ b/org.hl7.fhir.convertors/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml index 0180b572b..0eb500312 100644 --- a/org.hl7.fhir.dstu2/pom.xml +++ b/org.hl7.fhir.dstu2/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml index ee0b64319..78b815de9 100644 --- a/org.hl7.fhir.dstu2016may/pom.xml +++ b/org.hl7.fhir.dstu2016may/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml index 8a6413fdd..f84e0d63c 100644 --- a/org.hl7.fhir.dstu3/pom.xml +++ b/org.hl7.fhir.dstu3/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml index f80b85bd0..79b3a1c7b 100644 --- a/org.hl7.fhir.r4/pom.xml +++ b/org.hl7.fhir.r4/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml index 350282aba..2d0073050 100644 --- a/org.hl7.fhir.r4b/pom.xml +++ b/org.hl7.fhir.r4b/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml index 38d9a3ca4..c4b4f449b 100644 --- a/org.hl7.fhir.r5/pom.xml +++ b/org.hl7.fhir.r5/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml index 731f548c5..df558e2dd 100644 --- a/org.hl7.fhir.report/pom.xml +++ b/org.hl7.fhir.report/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml index 48f7916c2..45a2fe224 100644 --- a/org.hl7.fhir.utilities/pom.xml +++ b/org.hl7.fhir.utilities/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml index d08cb64b6..2caf452ba 100644 --- a/org.hl7.fhir.validation.cli/pom.xml +++ b/org.hl7.fhir.validation.cli/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml index 9cf0fb943..d6c453df3 100644 --- a/org.hl7.fhir.validation/pom.xml +++ b/org.hl7.fhir.validation/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT ../pom.xml diff --git a/pom.xml b/pom.xml index 91c2f3abe..b1afae3d4 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ HAPI FHIR --> org.hl7.fhir.core - 6.3.27 + 6.3.28-SNAPSHOT pom From f868576840988c5701d0ec4685fa71af49f37268 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Mon, 23 Sep 2024 09:11:46 -0400 Subject: [PATCH 43/68] Add support for R6 to R4 version enumeration --- .../resources40_50/Enumerations40_50.java | 30 +- .../org/hl7/fhir/r4/model/Enumerations.java | 2117 ++++++++--------- .../utils/formats/XmlLocationAnnotator.java | 9 + 3 files changed, 957 insertions(+), 1199 deletions(-) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Enumerations40_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Enumerations40_50.java index af0a66a27..84a211e98 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Enumerations40_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Enumerations40_50.java @@ -230,12 +230,6 @@ public class Enumerations40_50 { case _4_3_0: tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion._4_3_0); break; - case _4_3_0_CIBUILD: - tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion._4_3_0CIBUILD); - break; - case _4_3_0_SNAPSHOT1: - tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion._4_3_0SNAPSHOT1); - break; case _5_0_0: tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion._5_0_0); break; @@ -254,6 +248,15 @@ public class Enumerations40_50 { case _5_0_0DRAFTFINAL: tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion._5_0_0DRAFTFINAL); break; + case _6_0_0: + tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion._6_0_0); + break; + case _6_0_0_BALLOT1: + tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion._6_0_0_BALLOT1); + break; + case _6_0_0_BALLOT2: + tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion._6_0_0_BALLOT2); + break; default: tgt.setValue(org.hl7.fhir.r5.model.Enumerations.FHIRVersion.NULL); break; @@ -342,12 +345,6 @@ public class Enumerations40_50 { case _4_3_0: tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion._4_3_0); break; - case _4_3_0CIBUILD: - tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion._4_3_0_CIBUILD); - break; - case _4_3_0SNAPSHOT1: - tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion._4_3_0_SNAPSHOT1); - break; case _5_0_0: tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion._5_0_0); break; @@ -366,6 +363,15 @@ public class Enumerations40_50 { case _5_0_0DRAFTFINAL: tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion._5_0_0DRAFTFINAL); break; + case _6_0_0: + tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion._6_0_0); + break; + case _6_0_0_BALLOT1: + tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion._6_0_0_BALLOT1); + break; + case _6_0_0_BALLOT2: + tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion._6_0_0_BALLOT2); + break; default: tgt.setValue(org.hl7.fhir.r4.model.Enumerations.FHIRVersion.NULL); diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Enumerations.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Enumerations.java index d2ce3d418..8da4196d8 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Enumerations.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Enumerations.java @@ -1,6 +1,7 @@ package org.hl7.fhir.r4.model; import org.hl7.fhir.exceptions.FHIRException; +import org.hl7.fhir.utilities.Utilities; public class Enumerations { @@ -13173,1196 +13174,928 @@ public class Enumerations { } } - public enum FHIRVersion { - /** - * Oldest archived version of FHIR. - */ - _0_01, - /** - * 1st Draft for Comment (Sept 2012 Ballot). - */ - _0_05, - /** - * 2nd Draft for Comment (January 2013 Ballot). - */ - _0_06, - /** - * DSTU 1 Ballot version. - */ - _0_11, - /** - * DSTU 1 version. - */ - _0_0, - /** - * DSTU 1 Official version. - */ - _0_0_80, - /** - * DSTU 1 Official version Technical Errata #1. - */ - _0_0_81, - /** - * DSTU 1 Official version Technical Errata #2. - */ - _0_0_82, - /** - * January 2015 Ballot. - */ - _0_4, - /** - * Draft For Comment (January 2015 Ballot). - */ - _0_4_0, - /** - * May 2015 Ballot. - */ - _0_5, - /** - * DSTU 2 Ballot version (May 2015 Ballot). - */ - _0_5_0, - /** - * DSTU 2 version. - */ - _1_0, - /** - * DSTU 2 QA Preview + CQIF Ballot (Sep 2015). - */ - _1_0_0, - /** - * DSTU 2 (Official version). - */ - _1_0_1, - /** - * DSTU 2 (Official version) with 1 technical errata. - */ - _1_0_2, - /** - * GAO Ballot version. - */ - _1_1, - /** - * GAO Ballot + draft changes to main FHIR standard. - */ - _1_1_0, - /** - * Connectathon 12 (Montreal) version. - */ - _1_4, - /** - * CQF on FHIR Ballot + Connectathon 12 (Montreal). - */ - _1_4_0, - /** - * Connectathon 13 (Baltimore) version. - */ - _1_6, - /** - * FHIR STU3 Ballot + Connectathon 13 (Baltimore). - */ - _1_6_0, - /** - * Connectathon 14 (San Antonio) version. - */ - _1_8, - /** - * FHIR STU3 Candidate + Connectathon 14 (San Antonio). - */ - _1_8_0, - /** - * STU3 version. - */ - _3_0, - /** - * FHIR Release 3 (STU). - */ - _3_0_0, - /** - * FHIR Release 3 (STU) with 1 technical errata. - */ - _3_0_1, - /** - * FHIR Release 3 (STU) with 2 technical errata. - */ - _3_0_2, - /** - * R4 Ballot #1 version. - */ - _3_3, - /** - * R4 Ballot #1 + Connectaton 18 (Cologne). - */ - _3_3_0, - /** - * R4 Ballot #2 version. - */ - _3_5, - /** - * R4 Ballot #2 + Connectathon 19 (Baltimore). - */ - _3_5_0, - /** - * R4 version. - */ - _4_0, - /** - * FHIR Release 4 (Normative + STU). - */ - _4_0_0, - /** - * FHIR Release 4 (Normative + STU) with 1 technical errata. - */ - _4_0_1, - /** - * R4B Ballot #1 version. - */ - _4_1, - /** - * R4B Ballot #1 + Connectathon 27 (Virtual). - */ - _4_1_0, _4_3_0_SNAPSHOT1, _4_3_0_CIBUILD, - /** - * R5 Preview #1 version. - */ - _4_2, - /** - * R5 Preview #1 + Connectathon 23 (Sydney). - */ - _4_2_0, - /** - * R4B version. - */ - _4_3, - /** - * FHIR Release 4B (Normative + STU). - */ - _4_3_0, - /** - * R5 Preview #2 version. - */ - _4_4, - /** - * R5 Preview #2 + Connectathon 24 (Virtual). - */ - _4_4_0, - /** - * R5 Preview #3 version. - */ - _4_5, - /** - * R5 Preview #3 + Connectathon 25 (Virtual). - */ - _4_5_0, - /** - * R5 Draft Ballot version. - */ - _4_6, - /** - * R5 Draft Ballot + Connectathon 27 (Virtual). - */ - _4_6_0, - /** - * R5 Versions. - */ - _5_0, - /** - * R5 Final Version. - */ - _5_0_0, - /** - * R5 Rolling ci-build. - */ - _5_0_0CIBUILD, - /** - * R5 Preview #2. - */ - _5_0_0SNAPSHOT1, - /** - * R5 Interim tooling stage. - */ - _5_0_0SNAPSHOT2, - /** - * R5 Ballot. - */ - _5_0_0BALLOT, - /** - * R5Connectathon 32 release. - */ - _5_0_0SNAPSHOT3, _5_0_0DRAFTFINAL, - /** - * added to help the parsers - */ - NULL; - - public static FHIRVersion fromCode(String codeString) throws FHIRException { - if (codeString == null || "".equals(codeString)) - return null; - if ("0.01".equals(codeString)) - return _0_01; - if ("0.05".equals(codeString)) - return _0_05; - if ("0.06".equals(codeString)) - return _0_06; - if ("0.11".equals(codeString)) - return _0_11; - if ("0.0".equals(codeString)) - return _0_0; - if ("0.0.80".equals(codeString)) - return _0_0_80; - if ("0.0.81".equals(codeString)) - return _0_0_81; - if ("0.0.82".equals(codeString)) - return _0_0_82; - if ("0.4".equals(codeString)) - return _0_4; - if ("0.4.0".equals(codeString)) - return _0_4_0; - if ("0.5".equals(codeString)) - return _0_5; - if ("0.5.0".equals(codeString)) - return _0_5_0; - if ("1.0".equals(codeString)) - return _1_0; - if ("1.0.0".equals(codeString)) - return _1_0_0; - if ("1.0.1".equals(codeString)) - return _1_0_1; - if ("1.0.2".equals(codeString)) - return _1_0_2; - if ("1.1".equals(codeString)) - return _1_1; - if ("1.1.0".equals(codeString)) - return _1_1_0; - if ("1.4".equals(codeString)) - return _1_4; - if ("1.4.0".equals(codeString)) - return _1_4_0; - if ("1.6".equals(codeString)) - return _1_6; - if ("1.6.0".equals(codeString)) - return _1_6_0; - if ("1.8".equals(codeString)) - return _1_8; - if ("1.8.0".equals(codeString)) - return _1_8_0; - if ("3.0".equals(codeString)) - return _3_0; - if ("3.0.0".equals(codeString)) - return _3_0_0; - if ("3.0.1".equals(codeString)) - return _3_0_1; - if ("3.0.2".equals(codeString)) - return _3_0_2; - if ("3.3".equals(codeString)) - return _3_3; - if ("3.3.0".equals(codeString)) - return _3_3_0; - if ("3.5".equals(codeString)) - return _3_5; - if ("3.5.0".equals(codeString)) - return _3_5_0; - if ("4.0".equals(codeString)) - return _4_0; - if ("4.0.0".equals(codeString)) - return _4_0_0; - if ("4.0.1".equals(codeString)) - return _4_0_1; - if ("4.1".equals(codeString)) - return _4_1; - if ("4.1.0".equals(codeString)) - return _4_1_0; - if ("4.3.0-snapshot1".equals(codeString)) - return _4_3_0_SNAPSHOT1; - if ("4.3.0-cibuild".equals(codeString)) - return _4_3_0_CIBUILD; - if ("4.2".equals(codeString)) - return _4_2; - if ("4.2.0".equals(codeString)) - return _4_2_0; - if ("4.3".equals(codeString)) - return _4_3; - if ("4.3.0".equals(codeString)) - return _4_3_0; - if ("4.4".equals(codeString)) - return _4_4; - if ("4.4.0".equals(codeString)) - return _4_4_0; - if ("4.5".equals(codeString)) - return _4_5; - if ("4.5.0".equals(codeString)) - return _4_5_0; - if ("4.6".equals(codeString)) - return _4_6; - if ("4.6.0".equals(codeString)) - return _4_6_0; - if ("5.0".equals(codeString)) - return _5_0; - if ("5.0.0".equals(codeString)) - return _5_0_0; - if ("5.0.0-cibuild".equals(codeString)) - return _5_0_0CIBUILD; - if ("5.0.0-snapshot1".equals(codeString)) - return _5_0_0SNAPSHOT1; - if ("5.0.0-snapshot2".equals(codeString)) - return _5_0_0SNAPSHOT2; - if ("5.0.0-ballot".equals(codeString)) - return _5_0_0BALLOT; - if ("5.0.0-snapshot3".equals(codeString)) - return _5_0_0SNAPSHOT3; - if ("5.0.0-draft-final".equals(codeString)) - return _5_0_0DRAFTFINAL; - throw new FHIRException("Unknown FHIRVersion code '" + codeString + "'"); + public enum FHIRVersion { + /** + * Oldest archived version of FHIR. + */ + _0_01, + /** + * 1st Draft for Comment (Sept 2012 Ballot). + */ + _0_05, + /** + * 2nd Draft for Comment (January 2013 Ballot). + */ + _0_06, + /** + * DSTU 1 Ballot version. + */ + _0_11, + /** + * DSTU 1 version. + */ + _0_0, + /** + * DSTU 1 Official version. + */ + _0_0_80, + /** + * DSTU 1 Official version Technical Errata #1. + */ + _0_0_81, + /** + * DSTU 1 Official version Technical Errata #2. + */ + _0_0_82, + /** + * January 2015 Ballot. + */ + _0_4, + /** + * Draft For Comment (January 2015 Ballot). + */ + _0_4_0, + /** + * May 2015 Ballot. + */ + _0_5, + /** + * DSTU 2 Ballot version (May 2015 Ballot). + */ + _0_5_0, + /** + * DSTU 2 version. + */ + _1_0, + /** + * DSTU 2 QA Preview + CQIF Ballot (Sep 2015). + */ + _1_0_0, + /** + * DSTU 2 (Official version). + */ + _1_0_1, + /** + * DSTU 2 (Official version) with 1 technical errata. + */ + _1_0_2, + /** + * GAO Ballot version. + */ + _1_1, + /** + * GAO Ballot + draft changes to main FHIR standard. + */ + _1_1_0, + /** + * Connectathon 12 (Montreal) version. + */ + _1_4, + /** + * CQF on FHIR Ballot + Connectathon 12 (Montreal). + */ + _1_4_0, + /** + * Connectathon 13 (Baltimore) version. + */ + _1_6, + /** + * FHIR STU3 Ballot + Connectathon 13 (Baltimore). + */ + _1_6_0, + /** + * Connectathon 14 (San Antonio) version. + */ + _1_8, + /** + * FHIR STU3 Candidate + Connectathon 14 (San Antonio). + */ + _1_8_0, + /** + * STU3 version. + */ + _3_0, + /** + * FHIR Release 3 (STU). + */ + _3_0_0, + /** + * FHIR Release 3 (STU) with 1 technical errata. + */ + _3_0_1, + /** + * FHIR Release 3 (STU) with 2 technical errata. + */ + _3_0_2, + /** + * R4 Ballot #1 version. + */ + _3_3, + /** + * R4 Ballot #1 + Connectaton 18 (Cologne). + */ + _3_3_0, + /** + * R4 Ballot #2 version. + */ + _3_5, + /** + * R4 Ballot #2 + Connectathon 19 (Baltimore). + */ + _3_5_0, + /** + * R4 version. + */ + _4_0, + /** + * FHIR Release 4 (Normative + STU). + */ + _4_0_0, + /** + * FHIR Release 4 (Normative + STU) with 1 technical errata. + */ + _4_0_1, + /** + * R4B Ballot #1 version. + */ + _4_1, + /** + * R4B Ballot #1 + Connectathon 27 (Virtual). + */ + _4_1_0, + /** + * R5 Preview #1 version. + */ + _4_2, + /** + * R5 Preview #1 + Connectathon 23 (Sydney). + */ + _4_2_0, + /** + * R4B version. + */ + _4_3, + /** + * FHIR Release 4B (Normative + STU). + */ + _4_3_0, + /** + * FHIR Release 4B CI-Builld. + */ + _4_3_0CIBUILD, + /** + * FHIR Release 4B Snapshot #1. + */ + _4_3_0SNAPSHOT1, + /** + * R5 Preview #2 version. + */ + _4_4, + /** + * R5 Preview #2 + Connectathon 24 (Virtual). + */ + _4_4_0, + /** + * R5 Preview #3 version. + */ + _4_5, + /** + * R5 Preview #3 + Connectathon 25 (Virtual). + */ + _4_5_0, + /** + * R5 Draft Ballot version. + */ + _4_6, + /** + * R5 Draft Ballot + Connectathon 27 (Virtual). + */ + _4_6_0, + /** + * R5 Versions. + */ + _5_0, + /** + * R5 Final Version. + */ + _5_0_0, + /** + * R5 Rolling ci-build. + */ + _5_0_0CIBUILD, + /** + * R5 Preview #2. + */ + _5_0_0SNAPSHOT1, + /** + * R5 Interim tooling stage. + */ + _5_0_0SNAPSHOT2, + /** + * R5 Ballot. + */ + _5_0_0BALLOT, + /** + * R5 January 2023 Staging Release + Connectathon 32. + */ + _5_0_0SNAPSHOT3, + /** + * R5 Final QA. + */ + _5_0_0DRAFTFINAL, + /** + * R6 Rolling ci-build. + */ + _6_0_0CIBUILD, + /** + * R6 Formal version (does not exist yet) + */ + _6_0_0, + _6_0_0_BALLOT1, + _6_0_0_BALLOT2, + /** + * added to help the parsers + */ + NULL; + public static FHIRVersion fromCode(String codeString) throws FHIRException { + if (codeString == null || "".equals(codeString)) + return null; + if ("0.01".equals(codeString)) + return _0_01; + if ("0.05".equals(codeString)) + return _0_05; + if ("0.06".equals(codeString)) + return _0_06; + if ("0.11".equals(codeString)) + return _0_11; + if ("0.0".equals(codeString)) + return _0_0; + if ("0.0.80".equals(codeString)) + return _0_0_80; + if ("0.0.81".equals(codeString)) + return _0_0_81; + if ("0.0.82".equals(codeString)) + return _0_0_82; + if ("0.4".equals(codeString)) + return _0_4; + if ("0.4.0".equals(codeString)) + return _0_4_0; + if ("0.5".equals(codeString)) + return _0_5; + if ("0.5.0".equals(codeString)) + return _0_5_0; + if ("1.0".equals(codeString)) + return _1_0; + if ("1.0.0".equals(codeString)) + return _1_0_0; + if ("1.0.1".equals(codeString)) + return _1_0_1; + if ("1.0.2".equals(codeString)) + return _1_0_2; + if ("1.1".equals(codeString)) + return _1_1; + if ("1.1.0".equals(codeString)) + return _1_1_0; + if ("1.4".equals(codeString)) + return _1_4; + if ("1.4.0".equals(codeString)) + return _1_4_0; + if ("1.6".equals(codeString)) + return _1_6; + if ("1.6.0".equals(codeString)) + return _1_6_0; + if ("1.8".equals(codeString)) + return _1_8; + if ("1.8.0".equals(codeString)) + return _1_8_0; + if ("3.0".equals(codeString)) + return _3_0; + if ("3.0.0".equals(codeString)) + return _3_0_0; + if ("3.0.1".equals(codeString)) + return _3_0_1; + if ("3.0.2".equals(codeString)) + return _3_0_2; + if ("3.3".equals(codeString)) + return _3_3; + if ("3.3.0".equals(codeString)) + return _3_3_0; + if ("3.5".equals(codeString)) + return _3_5; + if ("3.5.0".equals(codeString)) + return _3_5_0; + if ("4.0".equals(codeString)) + return _4_0; + if ("4.0.0".equals(codeString)) + return _4_0_0; + if ("4.0.1".equals(codeString)) + return _4_0_1; + if ("4.1".equals(codeString)) + return _4_1; + if ("4.1.0".equals(codeString)) + return _4_1_0; + if ("4.2".equals(codeString)) + return _4_2; + if ("4.2.0".equals(codeString)) + return _4_2_0; + if ("4.3".equals(codeString)) + return _4_3; + if ("4.3.0".equals(codeString)) + return _4_3_0; + if ("4.3.0-cibuild".equals(codeString)) + return _4_3_0CIBUILD; + if ("4.3.0-snapshot1".equals(codeString)) + return _4_3_0SNAPSHOT1; + if ("4.4".equals(codeString)) + return _4_4; + if ("4.4.0".equals(codeString)) + return _4_4_0; + if ("4.5".equals(codeString)) + return _4_5; + if ("4.5.0".equals(codeString)) + return _4_5_0; + if ("4.6".equals(codeString)) + return _4_6; + if ("4.6.0".equals(codeString)) + return _4_6_0; + if ("5.0".equals(codeString)) + return _5_0; + if ("5.0.0".equals(codeString)) + return _5_0_0; + if ("5.0.0-cibuild".equals(codeString)) + return _5_0_0CIBUILD; + if ("5.0.0-snapshot1".equals(codeString)) + return _5_0_0SNAPSHOT1; + if ("5.0.0-snapshot2".equals(codeString)) + return _5_0_0SNAPSHOT2; + if ("5.0.0-ballot".equals(codeString)) + return _5_0_0BALLOT; + if ("5.0.0-snapshot3".equals(codeString)) + return _5_0_0SNAPSHOT3; + if ("5.0.0-draft-final".equals(codeString)) + return _5_0_0DRAFTFINAL; + if ("6.0.0-cibuild".equals(codeString)) + return _6_0_0CIBUILD; + if ("6.0.0".equals(codeString)) + return _6_0_0; + if ("6.0.0-ballot1".equals(codeString)) + return _6_0_0_BALLOT1; + if ("6.0.0-ballot2".equals(codeString)) + return _6_0_0_BALLOT2; + throw new FHIRException("Unknown FHIRVersion code '"+codeString+"'"); + } + public static boolean isValidCode(String codeString) { + if (codeString == null || "".equals(codeString)) + return false; + return Utilities.existsInList(codeString, "0.01", "0.05", "0.06", "0.11", "0.0", "0.0.80", "0.0.81", "0.0.82", "0.4", "0.4.0", "0.5", "0.5.0", "1.0", "1.0.0", "1.0.1", "1.0.2", "1.1", "1.1.0", "1.4", "1.4.0", "1.6", "1.6.0", "1.8", "1.8.0", "3.0", "3.0.0", "3.0.1", "3.0.2", "3.3", "3.3.0", "3.5", "3.5.0", "4.0", "4.0.0", "4.0.1", "4.1", "4.1.0", "4.2", "4.2.0", "4.3", "4.3.0", "4.3.0-cibuild", "4.3.0-snapshot1", "4.4", "4.4.0", "4.5", "4.5.0", "4.6", "4.6.0", "5.0", "5.0.0", "5.0.0-cibuild", "5.0.0-snapshot1", "5.0.0-snapshot2", "5.0.0-ballot", "5.0.0-snapshot3", "5.0.0-draft-final"); + } + public String toCode() { + switch (this) { + case _0_01: return "0.01"; + case _0_05: return "0.05"; + case _0_06: return "0.06"; + case _0_11: return "0.11"; + case _0_0: return "0.0"; + case _0_0_80: return "0.0.80"; + case _0_0_81: return "0.0.81"; + case _0_0_82: return "0.0.82"; + case _0_4: return "0.4"; + case _0_4_0: return "0.4.0"; + case _0_5: return "0.5"; + case _0_5_0: return "0.5.0"; + case _1_0: return "1.0"; + case _1_0_0: return "1.0.0"; + case _1_0_1: return "1.0.1"; + case _1_0_2: return "1.0.2"; + case _1_1: return "1.1"; + case _1_1_0: return "1.1.0"; + case _1_4: return "1.4"; + case _1_4_0: return "1.4.0"; + case _1_6: return "1.6"; + case _1_6_0: return "1.6.0"; + case _1_8: return "1.8"; + case _1_8_0: return "1.8.0"; + case _3_0: return "3.0"; + case _3_0_0: return "3.0.0"; + case _3_0_1: return "3.0.1"; + case _3_0_2: return "3.0.2"; + case _3_3: return "3.3"; + case _3_3_0: return "3.3.0"; + case _3_5: return "3.5"; + case _3_5_0: return "3.5.0"; + case _4_0: return "4.0"; + case _4_0_0: return "4.0.0"; + case _4_0_1: return "4.0.1"; + case _4_1: return "4.1"; + case _4_1_0: return "4.1.0"; + case _4_2: return "4.2"; + case _4_2_0: return "4.2.0"; + case _4_3: return "4.3"; + case _4_3_0: return "4.3.0"; + case _4_3_0CIBUILD: return "4.3.0-cibuild"; + case _4_3_0SNAPSHOT1: return "4.3.0-snapshot1"; + case _4_4: return "4.4"; + case _4_4_0: return "4.4.0"; + case _4_5: return "4.5"; + case _4_5_0: return "4.5.0"; + case _4_6: return "4.6"; + case _4_6_0: return "4.6.0"; + case _5_0: return "5.0"; + case _5_0_0: return "5.0.0"; + case _5_0_0CIBUILD: return "5.0.0-cibuild"; + case _5_0_0SNAPSHOT1: return "5.0.0-snapshot1"; + case _5_0_0SNAPSHOT2: return "5.0.0-snapshot2"; + case _5_0_0BALLOT: return "5.0.0-ballot"; + case _5_0_0SNAPSHOT3: return "5.0.0-snapshot3"; + case _5_0_0DRAFTFINAL: return "5.0.0-draft-final"; + case _6_0_0CIBUILD: return "6.0.0-cibuild"; + case _6_0_0: return "6.0.0"; + case _6_0_0_BALLOT1: return "6.0.0-ballot1"; + case _6_0_0_BALLOT2: return "6.0.0-ballot2"; + case NULL: return null; + default: return "?"; + } + } + public String getSystem() { + switch (this) { + case _0_01: return "http://hl7.org/fhir/FHIR-version"; + case _0_05: return "http://hl7.org/fhir/FHIR-version"; + case _0_06: return "http://hl7.org/fhir/FHIR-version"; + case _0_11: return "http://hl7.org/fhir/FHIR-version"; + case _0_0: return "http://hl7.org/fhir/FHIR-version"; + case _0_0_80: return "http://hl7.org/fhir/FHIR-version"; + case _0_0_81: return "http://hl7.org/fhir/FHIR-version"; + case _0_0_82: return "http://hl7.org/fhir/FHIR-version"; + case _0_4: return "http://hl7.org/fhir/FHIR-version"; + case _0_4_0: return "http://hl7.org/fhir/FHIR-version"; + case _0_5: return "http://hl7.org/fhir/FHIR-version"; + case _0_5_0: return "http://hl7.org/fhir/FHIR-version"; + case _1_0: return "http://hl7.org/fhir/FHIR-version"; + case _1_0_0: return "http://hl7.org/fhir/FHIR-version"; + case _1_0_1: return "http://hl7.org/fhir/FHIR-version"; + case _1_0_2: return "http://hl7.org/fhir/FHIR-version"; + case _1_1: return "http://hl7.org/fhir/FHIR-version"; + case _1_1_0: return "http://hl7.org/fhir/FHIR-version"; + case _1_4: return "http://hl7.org/fhir/FHIR-version"; + case _1_4_0: return "http://hl7.org/fhir/FHIR-version"; + case _1_6: return "http://hl7.org/fhir/FHIR-version"; + case _1_6_0: return "http://hl7.org/fhir/FHIR-version"; + case _1_8: return "http://hl7.org/fhir/FHIR-version"; + case _1_8_0: return "http://hl7.org/fhir/FHIR-version"; + case _3_0: return "http://hl7.org/fhir/FHIR-version"; + case _3_0_0: return "http://hl7.org/fhir/FHIR-version"; + case _3_0_1: return "http://hl7.org/fhir/FHIR-version"; + case _3_0_2: return "http://hl7.org/fhir/FHIR-version"; + case _3_3: return "http://hl7.org/fhir/FHIR-version"; + case _3_3_0: return "http://hl7.org/fhir/FHIR-version"; + case _3_5: return "http://hl7.org/fhir/FHIR-version"; + case _3_5_0: return "http://hl7.org/fhir/FHIR-version"; + case _4_0: return "http://hl7.org/fhir/FHIR-version"; + case _4_0_0: return "http://hl7.org/fhir/FHIR-version"; + case _4_0_1: return "http://hl7.org/fhir/FHIR-version"; + case _4_1: return "http://hl7.org/fhir/FHIR-version"; + case _4_1_0: return "http://hl7.org/fhir/FHIR-version"; + case _4_2: return "http://hl7.org/fhir/FHIR-version"; + case _4_2_0: return "http://hl7.org/fhir/FHIR-version"; + case _4_3: return "http://hl7.org/fhir/FHIR-version"; + case _4_3_0: return "http://hl7.org/fhir/FHIR-version"; + case _4_3_0CIBUILD: return "http://hl7.org/fhir/FHIR-version"; + case _4_3_0SNAPSHOT1: return "http://hl7.org/fhir/FHIR-version"; + case _4_4: return "http://hl7.org/fhir/FHIR-version"; + case _4_4_0: return "http://hl7.org/fhir/FHIR-version"; + case _4_5: return "http://hl7.org/fhir/FHIR-version"; + case _4_5_0: return "http://hl7.org/fhir/FHIR-version"; + case _4_6: return "http://hl7.org/fhir/FHIR-version"; + case _4_6_0: return "http://hl7.org/fhir/FHIR-version"; + case _5_0: return "http://hl7.org/fhir/FHIR-version"; + case _5_0_0: return "http://hl7.org/fhir/FHIR-version"; + case _5_0_0CIBUILD: return "http://hl7.org/fhir/FHIR-version"; + case _5_0_0SNAPSHOT1: return "http://hl7.org/fhir/FHIR-version"; + case _5_0_0SNAPSHOT2: return "http://hl7.org/fhir/FHIR-version"; + case _5_0_0BALLOT: return "http://hl7.org/fhir/FHIR-version"; + case _5_0_0SNAPSHOT3: return "http://hl7.org/fhir/FHIR-version"; + case _5_0_0DRAFTFINAL: return "http://hl7.org/fhir/FHIR-version"; + case _6_0_0CIBUILD: return "http://hl7.org/fhir/FHIR-version"; + case _6_0_0: return "http://hl7.org/fhir/FHIR-version"; + case _6_0_0_BALLOT1: return "http://hl7.org/fhir/FHIR-version"; + case NULL: return null; + default: return "?"; + } + } + public String getDefinition() { + switch (this) { + case _0_01: return "Oldest archived version of FHIR."; + case _0_05: return "1st Draft for Comment (Sept 2012 Ballot)."; + case _0_06: return "2nd Draft for Comment (January 2013 Ballot)."; + case _0_11: return "DSTU 1 Ballot version."; + case _0_0: return "DSTU 1 version."; + case _0_0_80: return "DSTU 1 Official version."; + case _0_0_81: return "DSTU 1 Official version Technical Errata #1."; + case _0_0_82: return "DSTU 1 Official version Technical Errata #2."; + case _0_4: return "January 2015 Ballot."; + case _0_4_0: return "Draft For Comment (January 2015 Ballot)."; + case _0_5: return "May 2015 Ballot."; + case _0_5_0: return "DSTU 2 Ballot version (May 2015 Ballot)."; + case _1_0: return "DSTU 2 version."; + case _1_0_0: return "DSTU 2 QA Preview + CQIF Ballot (Sep 2015)."; + case _1_0_1: return "DSTU 2 (Official version)."; + case _1_0_2: return "DSTU 2 (Official version) with 1 technical errata."; + case _1_1: return "GAO Ballot version."; + case _1_1_0: return "GAO Ballot + draft changes to main FHIR standard."; + case _1_4: return "Connectathon 12 (Montreal) version."; + case _1_4_0: return "CQF on FHIR Ballot + Connectathon 12 (Montreal)."; + case _1_6: return "Connectathon 13 (Baltimore) version."; + case _1_6_0: return "FHIR STU3 Ballot + Connectathon 13 (Baltimore)."; + case _1_8: return "Connectathon 14 (San Antonio) version."; + case _1_8_0: return "FHIR STU3 Candidate + Connectathon 14 (San Antonio)."; + case _3_0: return "STU3 version."; + case _3_0_0: return "FHIR Release 3 (STU)."; + case _3_0_1: return "FHIR Release 3 (STU) with 1 technical errata."; + case _3_0_2: return "FHIR Release 3 (STU) with 2 technical errata."; + case _3_3: return "R4 Ballot #1 version."; + case _3_3_0: return "R4 Ballot #1 + Connectaton 18 (Cologne)."; + case _3_5: return "R4 Ballot #2 version."; + case _3_5_0: return "R4 Ballot #2 + Connectathon 19 (Baltimore)."; + case _4_0: return "R4 version."; + case _4_0_0: return "FHIR Release 4 (Normative + STU)."; + case _4_0_1: return "FHIR Release 4 (Normative + STU) with 1 technical errata."; + case _4_1: return "R4B Ballot #1 version."; + case _4_1_0: return "R4B Ballot #1 + Connectathon 27 (Virtual)."; + case _4_2: return "R5 Preview #1 version."; + case _4_2_0: return "R5 Preview #1 + Connectathon 23 (Sydney)."; + case _4_3: return "R4B version."; + case _4_3_0: return "FHIR Release 4B (Normative + STU)."; + case _4_3_0CIBUILD: return "FHIR Release 4B CI-Builld."; + case _4_3_0SNAPSHOT1: return "FHIR Release 4B Snapshot #1."; + case _4_4: return "R5 Preview #2 version."; + case _4_4_0: return "R5 Preview #2 + Connectathon 24 (Virtual)."; + case _4_5: return "R5 Preview #3 version."; + case _4_5_0: return "R5 Preview #3 + Connectathon 25 (Virtual)."; + case _4_6: return "R5 Draft Ballot version."; + case _4_6_0: return "R5 Draft Ballot + Connectathon 27 (Virtual)."; + case _5_0: return "R5 Versions."; + case _5_0_0: return "R5 Final Version."; + case _5_0_0CIBUILD: return "R5 Rolling ci-build."; + case _5_0_0SNAPSHOT1: return "R5 Preview #2."; + case _5_0_0SNAPSHOT2: return "R5 Interim tooling stage."; + case _5_0_0BALLOT: return "R5 Ballot."; + case _5_0_0SNAPSHOT3: return "R5 January 2023 Staging Release + Connectathon 32."; + case _5_0_0DRAFTFINAL: return "R5 Final QA."; + case _6_0_0CIBUILD: return "R6 Rolling ci-build."; + case _6_0_0: return "R6 Final Version."; + case _6_0_0_BALLOT1: return "R6 Ballot #1."; + case NULL: return null; + default: return "?"; + } + } + public String getDisplay() { + switch (this) { + case _0_01: return "0.01"; + case _0_05: return "0.05"; + case _0_06: return "0.06"; + case _0_11: return "0.11"; + case _0_0: return "0.0"; + case _0_0_80: return "0.0.80"; + case _0_0_81: return "0.0.81"; + case _0_0_82: return "0.0.82"; + case _0_4: return "0.4"; + case _0_4_0: return "0.4.0"; + case _0_5: return "0.5"; + case _0_5_0: return "0.5.0"; + case _1_0: return "1.0"; + case _1_0_0: return "1.0.0"; + case _1_0_1: return "1.0.1"; + case _1_0_2: return "1.0.2"; + case _1_1: return "1.1"; + case _1_1_0: return "1.1.0"; + case _1_4: return "1.4"; + case _1_4_0: return "1.4.0"; + case _1_6: return "1.6"; + case _1_6_0: return "1.6.0"; + case _1_8: return "1.8"; + case _1_8_0: return "1.8.0"; + case _3_0: return "3.0"; + case _3_0_0: return "3.0.0"; + case _3_0_1: return "3.0.1"; + case _3_0_2: return "3.0.2"; + case _3_3: return "3.3"; + case _3_3_0: return "3.3.0"; + case _3_5: return "3.5"; + case _3_5_0: return "3.5.0"; + case _4_0: return "4.0"; + case _4_0_0: return "4.0.0"; + case _4_0_1: return "4.0.1"; + case _4_1: return "4.1"; + case _4_1_0: return "4.1.0"; + case _4_2: return "4.2"; + case _4_2_0: return "4.2.0"; + case _4_3: return "4.3"; + case _4_3_0: return "4.3.0"; + case _4_3_0CIBUILD: return "4.3.0-cibuild"; + case _4_3_0SNAPSHOT1: return "4.3.0-snapshot1"; + case _4_4: return "4.4"; + case _4_4_0: return "4.4.0"; + case _4_5: return "4.5"; + case _4_5_0: return "4.5.0"; + case _4_6: return "4.6"; + case _4_6_0: return "4.6.0"; + case _5_0: return "5.0"; + case _5_0_0: return "5.0.0"; + case _5_0_0CIBUILD: return "5.0.0-cibuild"; + case _5_0_0SNAPSHOT1: return "5.0.0-snapshot1"; + case _5_0_0SNAPSHOT2: return "5.0.0-snapshot2"; + case _5_0_0BALLOT: return "5.0.0-ballot"; + case _5_0_0SNAPSHOT3: return "5.0.0-snapshot3"; + case _5_0_0DRAFTFINAL: return "5.0.0-draft-final"; + case _6_0_0CIBUILD: return "6.0.0-cibuild"; + case _6_0_0: return "6.0.0"; + case _6_0_0_BALLOT1: return "6.0.0-ballot1"; + case _6_0_0_BALLOT2: return "6.0.0-ballot2"; + case NULL: return null; + default: return "?"; + } + } +// manual code from configuration.txt: +//public String toCode(int len) { +// return toCode().substring(0, len); +// } +// +// +// @Override +// public String toString() { +// return toCode(); +// } +// +// +// public boolean isR4B() { +// return toCode().startsWith("4.1"); +// } +// +// end addition } - public static boolean isValidCode(String codeString) { - if (codeString == null || "".equals(codeString)) - return false; - if ("0.01".equals(codeString)) - return true; - if ("0.05".equals(codeString)) - return true; - if ("0.06".equals(codeString)) - return true; - if ("0.11".equals(codeString)) - return true; - if ("0.0".equals(codeString)) - return true; - if ("0.0.80".equals(codeString)) - return true; - if ("0.0.81".equals(codeString)) - return true; - if ("0.0.82".equals(codeString)) - return true; - if ("0.4".equals(codeString)) - return true; - if ("0.4.0".equals(codeString)) - return true; - if ("0.5".equals(codeString)) - return true; - if ("0.5.0".equals(codeString)) - return true; - if ("1.0".equals(codeString)) - return true; - if ("1.0.0".equals(codeString)) - return true; - if ("1.0.1".equals(codeString)) - return true; - if ("1.0.2".equals(codeString)) - return true; - if ("1.1".equals(codeString)) - return true; - if ("1.1.0".equals(codeString)) - return true; - if ("1.4".equals(codeString)) - return true; - if ("1.4.0".equals(codeString)) - return true; - if ("1.6".equals(codeString)) - return true; - if ("1.6.0".equals(codeString)) - return true; - if ("1.8".equals(codeString)) - return true; - if ("1.8.0".equals(codeString)) - return true; - if ("3.0".equals(codeString)) - return true; - if ("3.0.0".equals(codeString)) - return true; - if ("3.0.1".equals(codeString)) - return true; - if ("3.0.2".equals(codeString)) - return true; - if ("3.3".equals(codeString)) - return true; - if ("3.3.0".equals(codeString)) - return true; - if ("3.5".equals(codeString)) - return true; - if ("3.5.0".equals(codeString)) - return true; - if ("4.0".equals(codeString)) - return true; - if ("4.0.0".equals(codeString)) - return true; - if ("4.0.1".equals(codeString)) - return true; - if ("4.1".equals(codeString)) - return true; - if ("4.1.0".equals(codeString)) - return true; - if ("4.2".equals(codeString)) - return true; - if ("4.2.0".equals(codeString)) - return true; - if ("4.3".equals(codeString)) - return true; - if ("4.3.0".equals(codeString)) - return true; - if ("4.4".equals(codeString)) - return true; - if ("4.4.0".equals(codeString)) - return true; - if ("4.5".equals(codeString)) - return true; - if ("4.5.0".equals(codeString)) - return true; - if ("4.6".equals(codeString)) - return true; - if ("4.6.0".equals(codeString)) - return true; - if ("5.0".equals(codeString)) - return true; - if ("5.0.0".equals(codeString)) - return true; - if ("5.0.0-cibuild".equals(codeString)) - return true; - if ("5.0.0-snapshot1".equals(codeString)) - return true; - if ("5.0.0-snapshot2".equals(codeString)) - return true; - if ("5.0.0-ballot".equals(codeString)) - return true; - return false; - } - - public String toCode() { - switch (this) { - case _0_01: - return "0.01"; - case _0_05: - return "0.05"; - case _0_06: - return "0.06"; - case _0_11: - return "0.11"; - case _0_0: - return "0.0"; - case _0_0_80: - return "0.0.80"; - case _0_0_81: - return "0.0.81"; - case _0_0_82: - return "0.0.82"; - case _0_4: - return "0.4"; - case _0_4_0: - return "0.4.0"; - case _0_5: - return "0.5"; - case _0_5_0: - return "0.5.0"; - case _1_0: - return "1.0"; - case _1_0_0: - return "1.0.0"; - case _1_0_1: - return "1.0.1"; - case _1_0_2: - return "1.0.2"; - case _1_1: - return "1.1"; - case _1_1_0: - return "1.1.0"; - case _1_4: - return "1.4"; - case _1_4_0: - return "1.4.0"; - case _1_6: - return "1.6"; - case _1_6_0: - return "1.6.0"; - case _1_8: - return "1.8"; - case _1_8_0: - return "1.8.0"; - case _3_0: - return "3.0"; - case _3_0_0: - return "3.0.0"; - case _3_0_1: - return "3.0.1"; - case _3_0_2: - return "3.0.2"; - case _3_3: - return "3.3"; - case _3_3_0: - return "3.3.0"; - case _3_5: - return "3.5"; - case _3_5_0: - return "3.5.0"; - case _4_0: - return "4.0"; - case _4_0_0: - return "4.0.0"; - case _4_0_1: - return "4.0.1"; - case _4_1: - return "4.1"; - case _4_1_0: - return "4.1.0"; - case _4_2: - return "4.2"; - case _4_2_0: - return "4.2.0"; - case _4_3: - return "4.3"; - case _4_3_0: - return "4.3.0"; - case _4_3_0_SNAPSHOT1: - return "4.3.0-snapshot1"; - case _4_3_0_CIBUILD: - return "4.3.0-cibuild"; - case _4_4: - return "4.4"; - case _4_4_0: - return "4.4.0"; - case _4_5: - return "4.5"; - case _4_5_0: - return "4.5.0"; - case _4_6: - return "4.6"; - case _4_6_0: - return "4.6.0"; - case _5_0: - return "5.0"; - case _5_0_0: - return "5.0.0"; - case _5_0_0CIBUILD: - return "5.0.0-cibuild"; - case _5_0_0SNAPSHOT1: - return "5.0.0-snapshot1"; - case _5_0_0SNAPSHOT2: - return "5.0.0-snapshot2"; - case _5_0_0BALLOT: - return "5.0.0-ballot"; - case _5_0_0SNAPSHOT3: - return "5.0.0-snapshot3"; - case _5_0_0DRAFTFINAL: - return "5.0.0-draft-final"; - case NULL: - return null; - default: - return "?"; - } - } - - public String getSystem() { - switch (this) { - case _0_01: - return "http://hl7.org/fhir/FHIR-version"; - case _0_05: - return "http://hl7.org/fhir/FHIR-version"; - case _0_06: - return "http://hl7.org/fhir/FHIR-version"; - case _0_11: - return "http://hl7.org/fhir/FHIR-version"; - case _0_0: - return "http://hl7.org/fhir/FHIR-version"; - case _0_0_80: - return "http://hl7.org/fhir/FHIR-version"; - case _0_0_81: - return "http://hl7.org/fhir/FHIR-version"; - case _0_0_82: - return "http://hl7.org/fhir/FHIR-version"; - case _0_4: - return "http://hl7.org/fhir/FHIR-version"; - case _0_4_0: - return "http://hl7.org/fhir/FHIR-version"; - case _0_5: - return "http://hl7.org/fhir/FHIR-version"; - case _0_5_0: - return "http://hl7.org/fhir/FHIR-version"; - case _1_0: - return "http://hl7.org/fhir/FHIR-version"; - case _1_0_0: - return "http://hl7.org/fhir/FHIR-version"; - case _1_0_1: - return "http://hl7.org/fhir/FHIR-version"; - case _1_0_2: - return "http://hl7.org/fhir/FHIR-version"; - case _1_1: - return "http://hl7.org/fhir/FHIR-version"; - case _1_1_0: - return "http://hl7.org/fhir/FHIR-version"; - case _1_4: - return "http://hl7.org/fhir/FHIR-version"; - case _1_4_0: - return "http://hl7.org/fhir/FHIR-version"; - case _1_6: - return "http://hl7.org/fhir/FHIR-version"; - case _1_6_0: - return "http://hl7.org/fhir/FHIR-version"; - case _1_8: - return "http://hl7.org/fhir/FHIR-version"; - case _1_8_0: - return "http://hl7.org/fhir/FHIR-version"; - case _3_0: - return "http://hl7.org/fhir/FHIR-version"; - case _3_0_0: - return "http://hl7.org/fhir/FHIR-version"; - case _3_0_1: - return "http://hl7.org/fhir/FHIR-version"; - case _3_0_2: - return "http://hl7.org/fhir/FHIR-version"; - case _3_3: - return "http://hl7.org/fhir/FHIR-version"; - case _3_3_0: - return "http://hl7.org/fhir/FHIR-version"; - case _3_5: - return "http://hl7.org/fhir/FHIR-version"; - case _3_5_0: - return "http://hl7.org/fhir/FHIR-version"; - case _4_0: - return "http://hl7.org/fhir/FHIR-version"; - case _4_0_0: - return "http://hl7.org/fhir/FHIR-version"; - case _4_0_1: - return "http://hl7.org/fhir/FHIR-version"; - case _4_1: - return "http://hl7.org/fhir/FHIR-version"; - case _4_1_0: - return "http://hl7.org/fhir/FHIR-version"; - case _4_2: - return "http://hl7.org/fhir/FHIR-version"; - case _4_2_0: - return "http://hl7.org/fhir/FHIR-version"; - case _4_3: - return "http://hl7.org/fhir/FHIR-version"; - case _4_3_0: - return "http://hl7.org/fhir/FHIR-version"; - case _4_3_0_SNAPSHOT1: - return "http://hl7.org/fhir/FHIR-version"; - case _4_3_0_CIBUILD: - return "http://hl7.org/fhir/FHIR-version"; - case _4_4: - return "http://hl7.org/fhir/FHIR-version"; - case _4_4_0: - return "http://hl7.org/fhir/FHIR-version"; - case _4_5: - return "http://hl7.org/fhir/FHIR-version"; - case _4_5_0: - return "http://hl7.org/fhir/FHIR-version"; - case _4_6: - return "http://hl7.org/fhir/FHIR-version"; - case _4_6_0: - return "http://hl7.org/fhir/FHIR-version"; - case _5_0: - return "http://hl7.org/fhir/FHIR-version"; - case _5_0_0: - return "http://hl7.org/fhir/FHIR-version"; - case _5_0_0CIBUILD: - return "http://hl7.org/fhir/FHIR-version"; - case _5_0_0SNAPSHOT1: - return "http://hl7.org/fhir/FHIR-version"; - case _5_0_0SNAPSHOT2: - return "http://hl7.org/fhir/FHIR-version"; - case _5_0_0BALLOT: - return "http://hl7.org/fhir/FHIR-version"; - case _5_0_0SNAPSHOT3: - return "http://hl7.org/fhir/FHIR-version"; - case _5_0_0DRAFTFINAL: - return "http://hl7.org/fhir/FHIR-version"; - case NULL: - return null; - default: - return "?"; - } - } - - public String getDefinition() { - switch (this) { - case _0_01: - return "Oldest archived version of FHIR."; - case _0_05: - return "1st Draft for Comment (Sept 2012 Ballot)."; - case _0_06: - return "2nd Draft for Comment (January 2013 Ballot)."; - case _0_11: - return "DSTU 1 Ballot version."; - case _0_0: - return "DSTU 1 version."; - case _0_0_80: - return "DSTU 1 Official version."; - case _0_0_81: - return "DSTU 1 Official version Technical Errata #1."; - case _0_0_82: - return "DSTU 1 Official version Technical Errata #2."; - case _0_4: - return "January 2015 Ballot."; - case _0_4_0: - return "Draft For Comment (January 2015 Ballot)."; - case _0_5: - return "May 2015 Ballot."; - case _0_5_0: - return "DSTU 2 Ballot version (May 2015 Ballot)."; - case _1_0: - return "DSTU 2 version."; - case _1_0_0: - return "DSTU 2 QA Preview + CQIF Ballot (Sep 2015)."; - case _1_0_1: - return "DSTU 2 (Official version)."; - case _1_0_2: - return "DSTU 2 (Official version) with 1 technical errata."; - case _1_1: - return "GAO Ballot version."; - case _1_1_0: - return "GAO Ballot + draft changes to main FHIR standard."; - case _1_4: - return "Connectathon 12 (Montreal) version."; - case _1_4_0: - return "CQF on FHIR Ballot + Connectathon 12 (Montreal)."; - case _1_6: - return "Connectathon 13 (Baltimore) version."; - case _1_6_0: - return "FHIR STU3 Ballot + Connectathon 13 (Baltimore)."; - case _1_8: - return "Connectathon 14 (San Antonio) version."; - case _1_8_0: - return "FHIR STU3 Candidate + Connectathon 14 (San Antonio)."; - case _3_0: - return "STU3 version."; - case _3_0_0: - return "FHIR Release 3 (STU)."; - case _3_0_1: - return "FHIR Release 3 (STU) with 1 technical errata."; - case _3_0_2: - return "FHIR Release 3 (STU) with 2 technical errata."; - case _3_3: - return "R4 Ballot #1 version."; - case _3_3_0: - return "R4 Ballot #1 + Connectaton 18 (Cologne)."; - case _3_5: - return "R4 Ballot #2 version."; - case _3_5_0: - return "R4 Ballot #2 + Connectathon 19 (Baltimore)."; - case _4_0: - return "R4 version."; - case _4_0_0: - return "FHIR Release 4 (Normative + STU)."; - case _4_0_1: - return "FHIR Release 4 (Normative + STU) with 1 technical errata."; - case _4_1: - return "R4B Ballot #1 version."; - case _4_1_0: - return "R4B Ballot #1 + Connectathon 27 (Virtual)."; - case _4_2: - return "R5 Preview #1 version."; - case _4_2_0: - return "R5 Preview #1 + Connectathon 23 (Sydney)."; - case _4_3_0_SNAPSHOT1: - return "FHIR Release 4B Snapshot #1"; - case _4_3_0_CIBUILD: - return "FHIR Release 4B CI-Builld"; - case _4_3: - return "R4B version."; - case _4_3_0: - return "FHIR Release 4B (Normative + STU)."; - case _4_4: - return "R5 Preview #2 version."; - case _4_4_0: - return "R5 Preview #2 + Connectathon 24 (Virtual)."; - case _4_5: - return "R5 Preview #3 version."; - case _4_5_0: - return "R5 Preview #3 + Connectathon 25 (Virtual)."; - case _4_6: - return "R5 Draft Ballot version."; - case _4_6_0: - return "R5 Draft Ballot + Connectathon 27 (Virtual)."; - case _5_0: - return "R5 Versions."; - case _5_0_0: - return "R5 Final Version."; - case _5_0_0CIBUILD: - return "R5 Rolling ci-build."; - case _5_0_0SNAPSHOT1: - return "R5 Preview #2."; - case _5_0_0SNAPSHOT2: - return "R5 Interim tooling stage."; - case _5_0_0BALLOT: - return "R5 Ballot."; - case _5_0_0SNAPSHOT3: - return "R5 Connectathon 32 release."; - case _5_0_0DRAFTFINAL: - return "R5 Final QA."; - case NULL: - return null; - default: - return "?"; - } - } - - public String getDisplay() { - switch (this) { - case _0_01: - return "0.01"; - case _0_05: - return "0.05"; - case _0_06: - return "0.06"; - case _0_11: - return "0.11"; - case _0_0: - return "0.0"; - case _0_0_80: - return "0.0.80"; - case _0_0_81: - return "0.0.81"; - case _0_0_82: - return "0.0.82"; - case _0_4: - return "0.4"; - case _0_4_0: - return "0.4.0"; - case _0_5: - return "0.5"; - case _0_5_0: - return "0.5.0"; - case _1_0: - return "1.0"; - case _1_0_0: - return "1.0.0"; - case _1_0_1: - return "1.0.1"; - case _1_0_2: - return "1.0.2"; - case _1_1: - return "1.1"; - case _1_1_0: - return "1.1.0"; - case _1_4: - return "1.4"; - case _1_4_0: - return "1.4.0"; - case _1_6: - return "1.6"; - case _1_6_0: - return "1.6.0"; - case _1_8: - return "1.8"; - case _1_8_0: - return "1.8.0"; - case _3_0: - return "3.0"; - case _3_0_0: - return "3.0.0"; - case _3_0_1: - return "3.0.1"; - case _3_0_2: - return "3.0.2"; - case _3_3: - return "3.3"; - case _3_3_0: - return "3.3.0"; - case _3_5: - return "3.5"; - case _3_5_0: - return "3.5.0"; - case _4_0: - return "4.0"; - case _4_0_0: - return "4.0.0"; - case _4_0_1: - return "4.0.1"; - case _4_1: - return "4.1"; - case _4_1_0: - return "4.1.0"; - case _4_2: - return "4.2"; - case _4_2_0: - return "4.2.0"; - case _4_3: - return "4.3"; - case _4_3_0: - return "4.3.0"; - case _4_3_0_SNAPSHOT1: - return "4.3.0-snapshot"; - case _4_3_0_CIBUILD: - return "4.3.0-cibuild"; - case _4_4: - return "4.4"; - case _4_4_0: - return "4.4.0"; - case _4_5: - return "4.5"; - case _4_5_0: - return "4.5.0"; - case _4_6: - return "4.6"; - case _4_6_0: - return "4.6.0"; - case _5_0: - return "5.0"; - case _5_0_0: - return "5.0.0"; - case _5_0_0CIBUILD: - return "5.0.0-cibuild"; - case _5_0_0SNAPSHOT1: - return "5.0.0-snapshot1"; - case _5_0_0SNAPSHOT2: - return "5.0.0-snapshot2"; - case _5_0_0BALLOT: - return "5.0.0-ballot"; - case _5_0_0SNAPSHOT3: - return "5.0.0-snapshot3"; - case _5_0_0DRAFTFINAL: - return "5.0.0-draft-final"; - case NULL: - return null; - default: - return "?"; - } - } - } - public static class FHIRVersionEnumFactory implements EnumFactory { public FHIRVersion fromCode(String codeString) throws IllegalArgumentException { if (codeString == null || "".equals(codeString)) - if (codeString == null || "".equals(codeString)) - return null; - if ("0.01".equals(codeString)) - return FHIRVersion._0_01; - if ("0.05".equals(codeString)) - return FHIRVersion._0_05; - if ("0.06".equals(codeString)) - return FHIRVersion._0_06; - if ("0.11".equals(codeString)) - return FHIRVersion._0_11; - if ("0.0.80".equals(codeString)) - return FHIRVersion._0_0_80; - if ("0.0.81".equals(codeString)) - return FHIRVersion._0_0_81; - if ("0.0.82".equals(codeString)) - return FHIRVersion._0_0_82; - if ("0.4.0".equals(codeString)) - return FHIRVersion._0_4_0; - if ("0.5".equals(codeString)) - return FHIRVersion._0_5; - if ("0.5.0".equals(codeString)) - return FHIRVersion._0_5_0; - if ("1.0".equals(codeString)) - return FHIRVersion._1_0; - if ("1.0.0".equals(codeString)) - return FHIRVersion._1_0_0; - if ("1.0.1".equals(codeString)) - return FHIRVersion._1_0_1; - if ("1.0.2".equals(codeString)) - return FHIRVersion._1_0_2; - if ("1.1".equals(codeString)) - return FHIRVersion._1_1; - if ("1.1.0".equals(codeString)) - return FHIRVersion._1_1_0; - if ("1.4".equals(codeString)) - return FHIRVersion._1_4; - if ("1.4.0".equals(codeString)) - return FHIRVersion._1_4_0; - if ("1.6".equals(codeString)) - return FHIRVersion._1_6; - if ("1.6.0".equals(codeString)) - return FHIRVersion._1_6_0; - if ("1.8".equals(codeString)) - return FHIRVersion._1_8; - if ("1.8.0".equals(codeString)) - return FHIRVersion._1_8_0; - if ("3.0".equals(codeString)) - return FHIRVersion._3_0; - if ("3.0.0".equals(codeString)) - return FHIRVersion._3_0_0; - if ("3.0.1".equals(codeString)) - return FHIRVersion._3_0_1; - if ("3.0.2".equals(codeString)) - return FHIRVersion._3_0_2; - if ("3.3".equals(codeString)) - return FHIRVersion._3_3; - if ("3.3.0".equals(codeString)) - return FHIRVersion._3_3_0; - if ("3.5".equals(codeString)) - return FHIRVersion._3_5; - if ("3.5.0".equals(codeString)) - return FHIRVersion._3_5_0; - if ("4.0".equals(codeString)) - return FHIRVersion._4_0; - if ("4.0.0".equals(codeString)) - return FHIRVersion._4_0_0; - if ("4.0.1".equals(codeString)) - return FHIRVersion._4_0_1; - if ("4.1".equals(codeString)) - return FHIRVersion._4_1; - if ("4.1.0".equals(codeString)) - return FHIRVersion._4_1_0; - if ("4.2".equals(codeString)) - return FHIRVersion._4_2; - if ("4.2.0".equals(codeString)) - return FHIRVersion._4_2_0; - if ("4.3".equals(codeString)) - return FHIRVersion._4_3; - if ("4.3.0".equals(codeString)) - return FHIRVersion._4_3_0; - if ("4.3.0-snapshot1".equalsIgnoreCase(codeString)) - return FHIRVersion._4_3_0_SNAPSHOT1; - if ("4.3.0-cibuild".equalsIgnoreCase(codeString)) - return FHIRVersion._4_3_0_CIBUILD; - if ("4.4".equals(codeString)) - return FHIRVersion._4_4; - if ("4.4.0".equals(codeString)) - return FHIRVersion._4_4_0; - if ("4.5".equals(codeString)) - return FHIRVersion._4_5; - if ("4.5.0".equals(codeString)) - return FHIRVersion._4_5_0; - if ("4.6".equals(codeString)) - return FHIRVersion._4_6; - if ("4.6.0".equals(codeString)) - return FHIRVersion._4_6_0; - if ("5.0".equals(codeString)) - return FHIRVersion._5_0; - if ("5.0.0".equals(codeString)) - return FHIRVersion._5_0_0; - if ("5.0.0-cibuild".equals(codeString)) - return FHIRVersion._5_0_0CIBUILD; - if ("5.0.0-snapshot1".equals(codeString)) - return FHIRVersion._5_0_0SNAPSHOT1; - if ("5.0.0-snapshot2".equals(codeString)) - return FHIRVersion._5_0_0SNAPSHOT2; - if ("5.0.0-ballot".equals(codeString)) - return FHIRVersion._5_0_0BALLOT; - if ("5.0.0-snapshot3".equals(codeString)) - return FHIRVersion._5_0_0SNAPSHOT3; - if ("5.0.0-draft-final".equals(codeString)) - return FHIRVersion._5_0_0DRAFTFINAL; - throw new IllegalArgumentException("Unknown FHIRVersion code '" + codeString + "'"); - } - - public Enumeration fromType(PrimitiveType code) throws FHIRException { - if (code == null) - return null; - if (code.isEmpty()) - return new Enumeration(this, FHIRVersion.NULL, code); - String codeString = code.asStringValue(); - if (codeString == null || "".equals(codeString)) - return new Enumeration(this, FHIRVersion.NULL, code); - if ("0.01".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_01, code); - if ("0.05".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_05, code); - if ("0.06".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_06, code); - if ("0.11".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_11, code); - if ("0.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_0, code); - if ("0.0.80".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_0_80, code); - if ("0.0.81".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_0_81, code); - if ("0.0.82".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_0_82, code); - if ("0.4".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_4, code); - if ("0.4.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_4_0, code); - if ("0.5".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_5, code); - if ("0.5.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._0_5_0, code); - if ("1.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_0, code); - if ("1.0.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_0_0, code); - if ("1.0.1".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_0_1, code); - if ("1.0.2".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_0_2, code); - if ("1.1".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_1, code); - if ("1.1.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_1_0, code); - if ("1.4".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_4, code); - if ("1.4.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_4_0, code); - if ("1.6".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_6, code); - if ("1.6.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_6_0, code); - if ("1.8".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_8, code); - if ("1.8.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._1_8_0, code); - if ("3.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._3_0, code); - if ("3.0.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._3_0_0, code); - if ("3.0.1".equals(codeString)) - return new Enumeration(this, FHIRVersion._3_0_1, code); - if ("3.0.2".equals(codeString)) - return new Enumeration(this, FHIRVersion._3_0_2, code); - if ("3.3".equals(codeString)) - return new Enumeration(this, FHIRVersion._3_3, code); - if ("3.3.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._3_3_0, code); - if ("3.5".equals(codeString)) - return new Enumeration(this, FHIRVersion._3_5, code); - if ("3.5.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._3_5_0, code); - if ("4.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_0, code); - if ("4.0.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_0_0, code); - if ("4.0.1".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_0_1, code); - if ("4.1".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_1, code); - if ("4.1.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_1_0, code); - if ("4.2".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_2, code); - if ("4.2.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_2_0, code); - if ("4.3".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_3, code); - if ("4.3.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_3_0, code); - if ("4.3.0-snapshot1".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_3_0_SNAPSHOT1, code); - if ("4.3.0-cibuild".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_3_0_CIBUILD, code); - if ("4.4".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_4, code); - if ("4.4.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_4_0, code); - if ("4.5".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_5, code); - if ("4.5.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_5_0, code); - if ("4.6".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_6, code); - if ("4.6.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._4_6_0, code); - if ("5.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._5_0, code); - if ("5.0.0".equals(codeString)) - return new Enumeration(this, FHIRVersion._5_0_0, code); - if ("5.0.0-cibuild".equals(codeString)) - return new Enumeration(this, FHIRVersion._5_0_0CIBUILD, code); - if ("5.0.0-snapshot1".equals(codeString)) - return new Enumeration(this, FHIRVersion._5_0_0SNAPSHOT1, code); - if ("5.0.0-snapshot2".equals(codeString)) - return new Enumeration(this, FHIRVersion._5_0_0SNAPSHOT2, code); - if ("5.0.0-ballot".equals(codeString)) - return new Enumeration(this, FHIRVersion._5_0_0BALLOT, code); - if ("5.0.0-snapshot3".equals(codeString)) - return new Enumeration(this, FHIRVersion._5_0_0SNAPSHOT3, code); - if ("5.0.0-draft-final".equals(codeString)) - return new Enumeration(this, FHIRVersion._5_0_0DRAFTFINAL, code); - throw new FHIRException("Unknown FHIRVersion code '" + codeString + "'"); - } + if (codeString == null || "".equals(codeString)) + return null; + if ("0.01".equals(codeString)) + return FHIRVersion._0_01; + if ("0.05".equals(codeString)) + return FHIRVersion._0_05; + if ("0.06".equals(codeString)) + return FHIRVersion._0_06; + if ("0.11".equals(codeString)) + return FHIRVersion._0_11; + if ("0.0".equals(codeString)) + return FHIRVersion._0_0; + if ("0.0.80".equals(codeString)) + return FHIRVersion._0_0_80; + if ("0.0.81".equals(codeString)) + return FHIRVersion._0_0_81; + if ("0.0.82".equals(codeString)) + return FHIRVersion._0_0_82; + if ("0.4".equals(codeString)) + return FHIRVersion._0_4; + if ("0.4.0".equals(codeString)) + return FHIRVersion._0_4_0; + if ("0.5".equals(codeString)) + return FHIRVersion._0_5; + if ("0.5.0".equals(codeString)) + return FHIRVersion._0_5_0; + if ("1.0".equals(codeString)) + return FHIRVersion._1_0; + if ("1.0.0".equals(codeString)) + return FHIRVersion._1_0_0; + if ("1.0.1".equals(codeString)) + return FHIRVersion._1_0_1; + if ("1.0.2".equals(codeString)) + return FHIRVersion._1_0_2; + if ("1.1".equals(codeString)) + return FHIRVersion._1_1; + if ("1.1.0".equals(codeString)) + return FHIRVersion._1_1_0; + if ("1.4".equals(codeString)) + return FHIRVersion._1_4; + if ("1.4.0".equals(codeString)) + return FHIRVersion._1_4_0; + if ("1.6".equals(codeString)) + return FHIRVersion._1_6; + if ("1.6.0".equals(codeString)) + return FHIRVersion._1_6_0; + if ("1.8".equals(codeString)) + return FHIRVersion._1_8; + if ("1.8.0".equals(codeString)) + return FHIRVersion._1_8_0; + if ("3.0".equals(codeString)) + return FHIRVersion._3_0; + if ("3.0.0".equals(codeString)) + return FHIRVersion._3_0_0; + if ("3.0.1".equals(codeString)) + return FHIRVersion._3_0_1; + if ("3.0.2".equals(codeString)) + return FHIRVersion._3_0_2; + if ("3.3".equals(codeString)) + return FHIRVersion._3_3; + if ("3.3.0".equals(codeString)) + return FHIRVersion._3_3_0; + if ("3.5".equals(codeString)) + return FHIRVersion._3_5; + if ("3.5.0".equals(codeString)) + return FHIRVersion._3_5_0; + if ("4.0".equals(codeString)) + return FHIRVersion._4_0; + if ("4.0.0".equals(codeString)) + return FHIRVersion._4_0_0; + if ("4.0.1".equals(codeString)) + return FHIRVersion._4_0_1; + if ("4.1".equals(codeString)) + return FHIRVersion._4_1; + if ("4.1.0".equals(codeString)) + return FHIRVersion._4_1_0; + if ("4.2".equals(codeString)) + return FHIRVersion._4_2; + if ("4.2.0".equals(codeString)) + return FHIRVersion._4_2_0; + if ("4.3".equals(codeString)) + return FHIRVersion._4_3; + if ("4.3.0".equals(codeString)) + return FHIRVersion._4_3_0; + if ("4.3.0-cibuild".equals(codeString)) + return FHIRVersion._4_3_0CIBUILD; + if ("4.3.0-snapshot1".equals(codeString)) + return FHIRVersion._4_3_0SNAPSHOT1; + if ("4.4".equals(codeString)) + return FHIRVersion._4_4; + if ("4.4.0".equals(codeString)) + return FHIRVersion._4_4_0; + if ("4.5".equals(codeString)) + return FHIRVersion._4_5; + if ("4.5.0".equals(codeString)) + return FHIRVersion._4_5_0; + if ("4.6".equals(codeString)) + return FHIRVersion._4_6; + if ("4.6.0".equals(codeString)) + return FHIRVersion._4_6_0; + if ("5.0".equals(codeString)) + return FHIRVersion._5_0; + if ("5.0.0".equals(codeString)) + return FHIRVersion._5_0_0; + if ("5.0.0-cibuild".equals(codeString)) + return FHIRVersion._5_0_0CIBUILD; + if ("5.0.0-snapshot1".equals(codeString)) + return FHIRVersion._5_0_0SNAPSHOT1; + if ("5.0.0-snapshot2".equals(codeString)) + return FHIRVersion._5_0_0SNAPSHOT2; + if ("5.0.0-ballot".equals(codeString)) + return FHIRVersion._5_0_0BALLOT; + if ("5.0.0-snapshot3".equals(codeString)) + return FHIRVersion._5_0_0SNAPSHOT3; + if ("5.0.0-draft-final".equals(codeString)) + return FHIRVersion._5_0_0DRAFTFINAL; + if ("6.0.0-cibuild".equals(codeString)) + return FHIRVersion._6_0_0CIBUILD; + if ("6.0.0".equals(codeString)) + return FHIRVersion._6_0_0; + if ("6.0.0-ballot1".equals(codeString)) + return FHIRVersion._6_0_0_BALLOT1; + if ("6.0.0-ballot2".equals(codeString)) + return FHIRVersion._6_0_0_BALLOT2; + throw new IllegalArgumentException("Unknown FHIRVersion code '"+codeString+"'"); + } + public Enumeration fromType(PrimitiveType code) throws FHIRException { + if (code == null) + return null; + if (code.isEmpty()) + return new Enumeration(this, FHIRVersion.NULL, code); + String codeString = ((PrimitiveType) code).asStringValue(); + if (codeString == null || "".equals(codeString)) + return new Enumeration(this, FHIRVersion.NULL, code); + if ("0.01".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_01, code); + if ("0.05".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_05, code); + if ("0.06".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_06, code); + if ("0.11".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_11, code); + if ("0.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_0, code); + if ("0.0.80".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_0_80, code); + if ("0.0.81".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_0_81, code); + if ("0.0.82".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_0_82, code); + if ("0.4".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_4, code); + if ("0.4.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_4_0, code); + if ("0.5".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_5, code); + if ("0.5.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._0_5_0, code); + if ("1.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_0, code); + if ("1.0.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_0_0, code); + if ("1.0.1".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_0_1, code); + if ("1.0.2".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_0_2, code); + if ("1.1".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_1, code); + if ("1.1.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_1_0, code); + if ("1.4".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_4, code); + if ("1.4.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_4_0, code); + if ("1.6".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_6, code); + if ("1.6.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_6_0, code); + if ("1.8".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_8, code); + if ("1.8.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._1_8_0, code); + if ("3.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._3_0, code); + if ("3.0.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._3_0_0, code); + if ("3.0.1".equals(codeString)) + return new Enumeration(this, FHIRVersion._3_0_1, code); + if ("3.0.2".equals(codeString)) + return new Enumeration(this, FHIRVersion._3_0_2, code); + if ("3.3".equals(codeString)) + return new Enumeration(this, FHIRVersion._3_3, code); + if ("3.3.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._3_3_0, code); + if ("3.5".equals(codeString)) + return new Enumeration(this, FHIRVersion._3_5, code); + if ("3.5.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._3_5_0, code); + if ("4.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_0, code); + if ("4.0.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_0_0, code); + if ("4.0.1".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_0_1, code); + if ("4.1".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_1, code); + if ("4.1.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_1_0, code); + if ("4.2".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_2, code); + if ("4.2.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_2_0, code); + if ("4.3".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_3, code); + if ("4.3.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_3_0, code); + if ("4.3.0-cibuild".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_3_0CIBUILD, code); + if ("4.3.0-snapshot1".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_3_0SNAPSHOT1, code); + if ("4.4".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_4, code); + if ("4.4.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_4_0, code); + if ("4.5".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_5, code); + if ("4.5.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_5_0, code); + if ("4.6".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_6, code); + if ("4.6.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._4_6_0, code); + if ("5.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._5_0, code); + if ("5.0.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._5_0_0, code); + if ("5.0.0-cibuild".equals(codeString)) + return new Enumeration(this, FHIRVersion._5_0_0CIBUILD, code); + if ("5.0.0-snapshot1".equals(codeString)) + return new Enumeration(this, FHIRVersion._5_0_0SNAPSHOT1, code); + if ("5.0.0-snapshot2".equals(codeString)) + return new Enumeration(this, FHIRVersion._5_0_0SNAPSHOT2, code); + if ("5.0.0-ballot".equals(codeString)) + return new Enumeration(this, FHIRVersion._5_0_0BALLOT, code); + if ("5.0.0-snapshot3".equals(codeString)) + return new Enumeration(this, FHIRVersion._5_0_0SNAPSHOT3, code); + if ("5.0.0-draft-final".equals(codeString)) + return new Enumeration(this, FHIRVersion._5_0_0DRAFTFINAL, code); + if ("6.0.0-cibuild".equals(codeString)) + return new Enumeration(this, FHIRVersion._6_0_0CIBUILD, code); + if ("6.0.0".equals(codeString)) + return new Enumeration(this, FHIRVersion._6_0_0, code); + if ("6.0.0-ballot1".equals(codeString)) + return new Enumeration(this, FHIRVersion._6_0_0_BALLOT1, code); + if ("6.0.0-ballot2".equals(codeString)) + return new Enumeration(this, FHIRVersion._6_0_0_BALLOT2, code); + throw new FHIRException("Unknown FHIRVersion code '"+codeString+"'"); + } public String toCode(FHIRVersion code) { if (code == FHIRVersion.NULL) return null; @@ -14448,10 +14181,10 @@ public class Enumerations { return "4.3"; if (code == FHIRVersion._4_3_0) return "4.3.0"; - if (code == FHIRVersion._4_3_0_SNAPSHOT1) - return "4.3.0-snapshot1"; - if (code == FHIRVersion._4_3_0_CIBUILD) + if (code == FHIRVersion._4_3_0CIBUILD) return "4.3.0-cibuild"; + if (code == FHIRVersion._4_3_0SNAPSHOT1) + return "4.3.0-snapshot1"; if (code == FHIRVersion._4_4) return "4.4"; if (code == FHIRVersion._4_4_0) @@ -14480,6 +14213,16 @@ public class Enumerations { return "5.0.0-snapshot3"; if (code == FHIRVersion._5_0_0DRAFTFINAL) return "5.0.0-draft-final"; + if (code == FHIRVersion._6_0_0CIBUILD) + return "6.0.0-cibuild"; + if (code == FHIRVersion._6_0_0) + return "6.0.0"; + if (code == FHIRVersion._6_0_0_BALLOT1) { + return "6.0.0-ballot1"; + } + if (code == FHIRVersion._6_0_0_BALLOT2) { + return "6.0.0-ballot2"; + } return "?"; } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java index 87ee99795..e4c989f54 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/formats/XmlLocationAnnotator.java @@ -80,6 +80,15 @@ public class XmlLocationAnnotator extends XMLFilterImpl { } } + @Override + public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException { + if (!name.equals("http://javax.xml.xmlconstants/property/accessExternalDTD")) { + return null; + } else { + return super.getProperty(name); + } + } + @Override public void setDocumentLocator(Locator locator) { super.setDocumentLocator(locator); From 98373c1fd5d6c39432cef8581bba0e2456bc0a66 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Mon, 23 Sep 2024 09:12:01 -0400 Subject: [PATCH 44/68] Fix SCT link to include version and point to the right place --- .../hl7/fhir/r5/renderers/DataRenderer.java | 11 +-- .../fhir/r5/renderers/ValueSetRenderer.java | 30 +++----- .../utilities/SnomedUtilities.java | 74 +++++++++++++++++++ 3 files changed, 90 insertions(+), 25 deletions(-) create mode 100644 org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/SnomedUtilities.java 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 4edaebc1f..839648e4d 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 @@ -46,6 +46,7 @@ import org.hl7.fhir.r5.renderers.utils.RenderingContext.GenerationRules; import org.hl7.fhir.r5.renderers.utils.RenderingContext.ResourceRendererMode; import org.hl7.fhir.r5.renderers.utils.ResourceWrapper; import org.hl7.fhir.r5.terminologies.JurisdictionUtilities; +import org.hl7.fhir.r5.terminologies.utilities.SnomedUtilities; import org.hl7.fhir.r5.terminologies.utilities.ValidationResult; import org.hl7.fhir.r5.utils.ToolingExtensions; import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; @@ -1177,8 +1178,8 @@ public class DataRenderer extends Renderer implements CodeResolver { } private String getLinkForSystem(String system, String version) { - if ("http://snomed.info/sct".equals(system)) { - return "https://browser.ihtsdotools.org/"; + if ("http://snomed.info/sct".equals(system)) { + return "https://browser.ihtsdotools.org/"; } else if ("http://loinc.org".equals(system)) { return "https://loinc.org/"; } else if ("http://unitsofmeasure.org".equals(system)) { @@ -1198,11 +1199,7 @@ public class DataRenderer extends Renderer implements CodeResolver { protected String getLinkForCode(String system, String version, String code) { if ("http://snomed.info/sct".equals(system)) { - if (!Utilities.noString(code)) { - return "http://snomed.info/id/"+code; - } else { - return "https://browser.ihtsdotools.org/"; - } + return SnomedUtilities.getSctLink(version, code, context.getContext().getExpansionParameters()); } else if ("http://loinc.org".equals(system)) { if (!Utilities.noString(code)) { return "https://loinc.org/"+code; diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java index 16adae09a..729e5ae42 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java @@ -51,6 +51,7 @@ import org.hl7.fhir.r5.terminologies.CodeSystemUtilities; import org.hl7.fhir.r5.terminologies.ValueSetUtilities; import org.hl7.fhir.r5.terminologies.expansion.ValueSetExpansionOutcome; import org.hl7.fhir.r5.terminologies.utilities.CodingValidationRequest; +import org.hl7.fhir.r5.terminologies.utilities.SnomedUtilities; import org.hl7.fhir.r5.terminologies.utilities.ValidationResult; import org.hl7.fhir.r5.utils.EOperationOutcome; import org.hl7.fhir.r5.utils.ToolingExtensions; @@ -825,7 +826,7 @@ public class ValueSetRenderer extends TerminologyRenderer { } String s = Utilities.padLeft("", '\u00A0', i*2); td.attribute("style", "white-space:nowrap").addText(s); - addCodeToTable(c.getAbstract(), c.getSystem(), c.getCode(), c.getDisplay(), td); + addCodeToTable(c.getAbstract(), c.getSystem(), c.getVersion(), c.getCode(), c.getDisplay(), td); td = tr.td(); td.addText(c.getSystem()); td = tr.td(); @@ -863,7 +864,7 @@ public class ValueSetRenderer extends TerminologyRenderer { first = false; XhtmlNode span = td.span(null, mapping.comp.getRelationship().toString()); span.addText(getCharForRelationship(mapping.comp)); - addRefToCode(td, mapping.group.getTarget(), m.getLink(), mapping.comp.getCode()); + addRefToCode(td, mapping.group.getTarget(), null, m.getLink(), mapping.comp.getCode()); if (!Utilities.noString(mapping.comp.getComment())) td.i().tx("("+mapping.comp.getComment()+")"); } @@ -900,13 +901,13 @@ public class ValueSetRenderer extends TerminologyRenderer { return true; } - private void addCodeToTable(boolean isAbstract, String system, String code, String display, XhtmlNode td) { + private void addCodeToTable(boolean isAbstract, String system, String version, String code, String display, XhtmlNode td) { CodeSystem e = getContext().getWorker().fetchCodeSystem(system); if (e == null || (e.getContent() != org.hl7.fhir.r5.model.Enumerations.CodeSystemContentMode.COMPLETE && e.getContent() != org.hl7.fhir.r5.model.Enumerations.CodeSystemContentMode.FRAGMENT)) { if (isAbstract) td.i().setAttribute("title", context.formatPhrase(RenderingContext.VS_ABSTRACT_CODE_HINT)).addText(code); else if ("http://snomed.info/sct".equals(system)) { - td.ah(context.prefixLocalHref(sctLink(code))).addText(code); + td.ah(context.prefixLocalHref(SnomedUtilities.getSctLink(version, code, context.getContext().getExpansionParameters()))).addText(code); } else if ("http://loinc.org".equals(system)) { td.ah(context.prefixLocalHref(LoincLinker.getLinkForCode(code))).addText(code); } else @@ -928,15 +929,8 @@ public class ValueSetRenderer extends TerminologyRenderer { } } - - public String sctLink(String code) { -// if (snomedEdition != null) -// http://browser.ihtsdotools.org/?perspective=full&conceptId1=428041000124106&edition=us-edition&release=v20180301&server=https://prod-browser-exten.ihtsdotools.org/api/snomed&langRefset=900000000000509007 - return "http://snomed.info/id/"+code; - } - - private void addRefToCode(XhtmlNode td, String target, String vslink, String code) { - addCodeToTable(false, target, code, null, td); + private void addRefToCode(XhtmlNode td, String target, String vslink, String code, String version) { + addCodeToTable(false, target, version, code, null, td); // CodeSystem cs = getContext().getWorker().fetchCodeSystem(target); // String cslink = getCsRef(cs); // String link = cslink != null ? cslink+"#"+cs.getId()+"-"+code : vslink+"#"+code; @@ -1212,10 +1206,10 @@ public class ValueSetRenderer extends TerminologyRenderer { } addMapHeaders(addTableHeaderRowStandard(t, false, true, hasDefinition, hasComments, false, false, null, langs, designations, doDesignations), maps); for (ConceptReferenceComponent c : inc.getConcept()) { - renderConcept(inc, langs, doDesignations, maps, designations, definitions, t, hasComments, hasDefinition, c); + renderConcept(inc, langs, doDesignations, maps, designations, definitions, t, hasComments, hasDefinition, c, inc.getVersion()); } for (Base b : VersionComparisonAnnotation.getDeleted(inc, "concept" )) { - renderConcept(inc, langs, doDesignations, maps, designations, definitions, t, hasComments, hasDefinition, (ConceptReferenceComponent) b); + renderConcept(inc, langs, doDesignations, maps, designations, definitions, t, hasComments, hasDefinition, (ConceptReferenceComponent) b, inc.getVersion()); } } if (inc.getFilter().size() > 0) { @@ -1312,11 +1306,11 @@ public class ValueSetRenderer extends TerminologyRenderer { private void renderConcept(ConceptSetComponent inc, List langs, boolean doDesignations, List maps, Map designations, Map definitions, - XhtmlNode t, boolean hasComments, boolean hasDefinition, ConceptReferenceComponent c) { + XhtmlNode t, boolean hasComments, boolean hasDefinition, ConceptReferenceComponent c, String version) { XhtmlNode tr = t.tr(); XhtmlNode td = renderStatusRow(c, t, tr); ConceptDefinitionComponent cc = definitions == null ? null : definitions.get(c.getCode()); - addCodeToTable(false, inc.getSystem(), c.getCode(), c.hasDisplay()? c.getDisplay() : cc != null ? cc.getDisplay() : "", td); + addCodeToTable(false, inc.getSystem(), version, c.getCode(), c.hasDisplay()? c.getDisplay() : cc != null ? cc.getDisplay() : "", td); td = tr.td(); if (!Utilities.noString(c.getDisplay())) @@ -1355,7 +1349,7 @@ public class ValueSetRenderer extends TerminologyRenderer { first = false; XhtmlNode span = td.span(null, mapping.comp.getRelationship().toString()); span.addText(getCharForRelationship(mapping.comp)); - addRefToCode(td, mapping.group.getTarget(), m.getLink(), mapping.comp.getCode()); + addRefToCode(td, mapping.group.getTarget(), m.getLink(), mapping.comp.getCode(), version); if (!Utilities.noString(mapping.comp.getComment())) td.i().tx("("+mapping.comp.getComment()+")"); } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/SnomedUtilities.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/SnomedUtilities.java new file mode 100644 index 000000000..07f009626 --- /dev/null +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/SnomedUtilities.java @@ -0,0 +1,74 @@ +package org.hl7.fhir.r5.terminologies.utilities; + +import org.hl7.fhir.r5.model.Parameters; +import org.hl7.fhir.r5.model.Parameters.ParametersParameterComponent; +import org.hl7.fhir.utilities.Utilities; + + +//URL: http://snomed.info/sct/[module]/version/[e.g. 20150131]' +//International: 900000000000207008 +//US: 731000124108 +//Australia: 32506021000036107 +//Belgium: 11000172109 +//Canada: 20611000087101 +//Spain: 449081005 +//Denmark: 554471000005108 +//Netherlands: 11000146104 +//Sweden: 45991000052106 +//Switzerland: 2011000195101 +//UK: 83821000000107 +//IPS: 827022005 + +public class SnomedUtilities { + + public static String getVersionFromParameters(Parameters p, String version) { + for (ParametersParameterComponent pp : p.getParameter()) { + switch (pp.getName()) { + case "system-version" : + if (version == null) { + return pp.getValue().primitiveValue(); + } + case "force-system-version": + return pp.getValue().primitiveValue(); + } + } + return version; + } + + public static String getEditionFromVersion(String version) { + if (version == null) { + return null; + } + if (version.startsWith("http://snomed.info/sct/")) { + version = version.substring(23); + } + if (version.contains("/")) { + version = version.substring(0, version.indexOf("/")); + } + if (Utilities.existsInList(version, "900000000000207008", "731000124108", "32506021000036107", "11000172109", "20611000087101", + "449081005", "554471000005108", "11000146104", "45991000052106", "2011000195101", "83821000000107", "827022005")) { + return version; + } else { + return null; + } + } + + public static String getSctLink(String version, String code, Parameters p) { + if (!Utilities.noString(code)) { + version = SnomedUtilities.getVersionFromParameters(p, version); + String edId = SnomedUtilities.getEditionFromVersion(version); + if (edId != null) { + // if there's a version that's an edition, then: + // http://snomed.info/sct/11000172109/id//371305003 + return "http://snomed.info/sct/"+edId+"/id/"+code; + } else { + // no, version: + return "http://snomed.info/id/"+code; + } + } else { + return "https://browser.ihtsdotools.org/"; + } + } +} + + From b37073592b88a5212107003f8df42a375e910892 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Mon, 23 Sep 2024 09:12:17 -0400 Subject: [PATCH 45/68] set default language to tag not display --- org.hl7.fhir.utilities/src/main/resources/Messages.properties | 3 ++- .../java/org/hl7/fhir/validation/cli/model/CliContext.java | 2 +- pom.xml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages.properties b/org.hl7.fhir.utilities/src/main/resources/Messages.properties index aa8a725c8..4c4e156d9 100644 --- a/org.hl7.fhir.utilities/src/main/resources/Messages.properties +++ b/org.hl7.fhir.utilities/src/main/resources/Messages.properties @@ -1140,7 +1140,8 @@ TYPE_SPECIFIC_CHECKS_DT_XHTML_LITERAL_HREF = Hyperlink scheme ''{3}'' in ''{0}'' SM_TARGET_TYPE_UNKNOWN = The type of the target variable is not known: {0} XHTML_XHTML_ATTRIBUTE_XML_SPACE = The attribute 'xml:space' is legal but has a fixed value of 'preserve'. It''s use is discouraged VALIDATION_HL7_PUBLISHER_MULTIPLE_WGS = This resource has more than workgroup extension (http://hl7.org/fhir/StructureDefinition/structuredefinition-wg) -NO_VALID_DISPLAY_FOUND_NONE_FOR_LANG = Wrong Display Name ''{0}'' for {1}#{2}. There are no valid display names found for language(s) ''{3}''. Default display is ''{4}'' +NO_VALID_DISPLAY_FOUND_NONE_FOR_LANG_OK = There are no valid display names found for the code {1}#{2} for language(s) ''{3}''. The display is ''{4}'' the default language display +NO_VALID_DISPLAY_FOUND_NONE_FOR_LANG_ERR = Wrong Display Name ''{0}'' for {1}#{2}. There are no valid display names found for language(s) ''{3}''. Default display is ''{4}'' NO_VALID_DISPLAY_AT_ALL = Cannot validate display Name ''{0}'' for {1}#{2}: No displays are known SD_BASE_EXPERIMENTAL = The definition builds on ''{0}'' which is experimental, but this definition is not labeled as experimental SD_ED_EXPERIMENTAL_BINDING = The definition for the element ''{0}'' binds to the value set ''{1}'' which is experimental, but this structure is not labeled as experimental 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 418526071..a38b14fbb 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 @@ -130,7 +130,7 @@ public class CliContext { private boolean showTimes = false; @JsonProperty("locale") - private String locale = Locale.ENGLISH.getDisplayLanguage(); + private String locale = Locale.ENGLISH.toLanguageTag(); @JsonProperty("locations") private Map locations = new HashMap(); diff --git a/pom.xml b/pom.xml index b1afae3d4..548747036 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.23 + 1.5.24-SNAPSHOT 2.17.0 5.9.2 1.8.2 From a1f014730eaa4744e80e57bc6d477c0ac3dd16b9 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 24 Sep 2024 20:25:02 -0400 Subject: [PATCH 46/68] Add response time to tx log --- .../java/org/hl7/fhir/dstu2/utils/client/ClientUtils.java | 2 +- .../org/hl7/fhir/dstu2016may/utils/client/ClientUtils.java | 2 +- .../fhir/dstu3/utils/client/network/FhirRequestBuilder.java | 2 +- .../dstu3/utils/client/network/FhirRequestBuilderTests.java | 4 ++-- .../main/java/org/hl7/fhir/r4/context/HTMLClientLogger.java | 2 +- .../fhir/r4/utils/client/network/FhirLoggingInterceptor.java | 2 +- .../main/java/org/hl7/fhir/r4b/context/HTMLClientLogger.java | 2 +- .../main/java/org/hl7/fhir/r4b/context/TextClientLogger.java | 2 +- .../fhir/r4b/utils/client/network/FhirLoggingInterceptor.java | 2 +- .../org/hl7/fhir/r4b/utils/client/network/ClientTest.java | 2 +- .../main/java/org/hl7/fhir/r5/context/HTMLClientLogger.java | 2 +- .../main/java/org/hl7/fhir/r5/context/TextClientLogger.java | 4 ++-- .../fhir/r5/utils/client/network/FhirLoggingInterceptor.java | 3 ++- .../java/org/hl7/fhir/r5/utils/client/network/ClientTest.java | 2 +- .../main/java/org/hl7/fhir/utilities/ToolingClientLogger.java | 2 +- .../org/hl7/fhir/utilities/tests/CacheVerificationLogger.java | 2 +- 16 files changed, 19 insertions(+), 18 deletions(-) diff --git a/org.hl7.fhir.dstu2/src/main/java/org/hl7/fhir/dstu2/utils/client/ClientUtils.java b/org.hl7.fhir.dstu2/src/main/java/org/hl7/fhir/dstu2/utils/client/ClientUtils.java index c5cc2ba3c..e4261fd9c 100644 --- a/org.hl7.fhir.dstu2/src/main/java/org/hl7/fhir/dstu2/utils/client/ClientUtils.java +++ b/org.hl7.fhir.dstu2/src/main/java/org/hl7/fhir/dstu2/utils/client/ClientUtils.java @@ -683,7 +683,7 @@ public class ClientUtils { for (Header h : response.getAllHeaders()) { headers.add(h.toString()); } - logger.logResponse(response.getStatusLine().toString(), headers, cnt); + logger.logResponse(response.getStatusLine().toString(), headers, cnt, 0); } return cnt; } diff --git a/org.hl7.fhir.dstu2016may/src/main/java/org/hl7/fhir/dstu2016may/utils/client/ClientUtils.java b/org.hl7.fhir.dstu2016may/src/main/java/org/hl7/fhir/dstu2016may/utils/client/ClientUtils.java index 8ad3be73b..441f96db5 100644 --- a/org.hl7.fhir.dstu2016may/src/main/java/org/hl7/fhir/dstu2016may/utils/client/ClientUtils.java +++ b/org.hl7.fhir.dstu2016may/src/main/java/org/hl7/fhir/dstu2016may/utils/client/ClientUtils.java @@ -625,7 +625,7 @@ public class ClientUtils { for (Header h : response.getAllHeaders()) { headers.add(h.toString()); } - logger.logResponse(response.getStatusLine().toString(), headers, cnt); + logger.logResponse(response.getStatusLine().toString(), headers, cnt, 0); } return cnt; } diff --git a/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilder.java b/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilder.java index 006cf6bd8..ad15ae999 100644 --- a/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilder.java +++ b/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilder.java @@ -371,7 +371,7 @@ public class FhirRequestBuilder { try { if (logger != null) { - logger.logResponse(Integer.toString(responseCode), headerList, responseBody); + logger.logResponse(Integer.toString(responseCode), headerList, responseBody, 0); } } catch (Exception e) { System.out.println("Error parsing response body passed in to logger ->\n" + e.getLocalizedMessage()); diff --git a/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilderTests.java b/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilderTests.java index 13a901ce7..66607a629 100644 --- a/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilderTests.java +++ b/org.hl7.fhir.dstu3/src/test/java/org/hl7/fhir/dstu3/utils/client/network/FhirRequestBuilderTests.java @@ -95,13 +95,13 @@ public class FhirRequestBuilderTests { Mockito.doReturn(parser).when(fhirRequestBuilder).getParser(ArgumentMatchers.eq("json")); fhirRequestBuilder.unmarshalReference(response, "json"); - Mockito.verify(logger).logResponse(ArgumentMatchers.eq("200"), ArgumentMatchers.anyList(), AdditionalMatchers.aryEq(RESPONSE_BODY_STRING.getBytes())); + Mockito.verify(logger).logResponse(ArgumentMatchers.eq("200"), ArgumentMatchers.anyList(), AdditionalMatchers.aryEq(RESPONSE_BODY_STRING.getBytes()), 0); } @Test public void testUnmarshallFeedLogging() { fhirRequestBuilder.unmarshalFeed(response, "application/json"); - Mockito.verify(logger).logResponse(ArgumentMatchers.eq("200"), ArgumentMatchers.anyList(), AdditionalMatchers.aryEq(RESPONSE_BODY_STRING.getBytes())); + Mockito.verify(logger).logResponse(ArgumentMatchers.eq("200"), ArgumentMatchers.anyList(), AdditionalMatchers.aryEq(RESPONSE_BODY_STRING.getBytes()), 0); } } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/context/HTMLClientLogger.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/context/HTMLClientLogger.java index 23c2e93eb..80d24f319 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/context/HTMLClientLogger.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/context/HTMLClientLogger.java @@ -77,7 +77,7 @@ public class HTMLClientLogger implements ToolingClientLogger { } @Override - public void logResponse(String outcome, List headers, byte[] body) { + public void logResponse(String outcome, List headers, byte[] body, long start) { if (file == null) return; file.println("