Merge pull request #1481 from hapifhir/2023-11-gg-vital-signs
2023 11 gg vital signs
This commit is contained in:
commit
ab707e38b6
|
@ -12,11 +12,13 @@ import java.util.Map;
|
|||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.r4.formats.IParser.OutputStyle;
|
||||
import org.hl7.fhir.r4.formats.JsonParser;
|
||||
import org.hl7.fhir.r4.model.CapabilityStatement;
|
||||
import org.hl7.fhir.r4.model.OperationOutcome;
|
||||
import org.hl7.fhir.r4.model.OperationOutcome.IssueSeverity;
|
||||
import org.hl7.fhir.r4.model.OperationOutcome.IssueType;
|
||||
import org.hl7.fhir.r4.model.ValueSet;
|
||||
import org.hl7.fhir.r4.utils.client.FHIRToolingClient;
|
||||
import org.hl7.fhir.r4.terminologies.JurisdictionUtilities;
|
||||
import org.hl7.fhir.utilities.CSVReader;
|
||||
import org.hl7.fhir.utilities.Utilities;
|
||||
|
||||
|
@ -42,6 +44,10 @@ public class VSACImporter extends OIDBasedValueSetImporter {
|
|||
fhirToolingClient.setPassword(apiKey);
|
||||
fhirToolingClient.setTimeout(120000);
|
||||
|
||||
CapabilityStatement cs = fhirToolingClient.getCapabilitiesStatement();
|
||||
JsonParser json = new JsonParser();
|
||||
json.setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream(Utilities.path("[tmp]", "vsac-capability-statmenet.json")), cs);
|
||||
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
while (csv.line()) {
|
||||
|
@ -57,19 +63,21 @@ public class VSACImporter extends OIDBasedValueSetImporter {
|
|||
errs.put(oid, "Expansion: " +e.getMessage());
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
|
||||
if (vs.hasTitle()) {
|
||||
if (vs.getTitle().equals(vs.getDescription())) {
|
||||
vs.setTitle(vs.getName());
|
||||
} else {
|
||||
System.out.println(oid);
|
||||
System.out.println(" name: "+vs.getName());
|
||||
System.out.println(" title: "+vs.getTitle());
|
||||
System.out.println(" desc: "+vs.getDescription());
|
||||
// System.out.println(oid);
|
||||
// System.out.println(" name: "+vs.getName());
|
||||
// System.out.println(" title: "+vs.getTitle());
|
||||
// System.out.println(" desc: "+vs.getDescription());
|
||||
}
|
||||
} else {
|
||||
vs.setTitle(vs.getName());
|
||||
}
|
||||
vs.setName(makeValidName(vs.getName()));
|
||||
JurisdictionUtilities.setJurisdictionCountry(vs.getJurisdiction(), "US");
|
||||
new JsonParser().setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream(Utilities.path(dest, "ValueSet-" + oid + ".json")), vs);
|
||||
}
|
||||
i++;
|
||||
|
@ -113,7 +121,7 @@ public class VSACImporter extends OIDBasedValueSetImporter {
|
|||
upper = true;
|
||||
}
|
||||
}
|
||||
System.out.println(b.toString()+" from "+name);
|
||||
// System.out.println(b.toString()+" from "+name);
|
||||
return b.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ import org.hl7.fhir.r4.model.Meta;
|
|||
import org.hl7.fhir.r4.model.Type;
|
||||
import org.hl7.fhir.r4.model.UriType;
|
||||
import org.hl7.fhir.r4.utils.ToolingExtensions;
|
||||
import org.hl7.fhir.r4.model.Coding;
|
||||
import org.hl7.fhir.utilities.StandardsStatus;
|
||||
import org.hl7.fhir.utilities.Utilities;
|
||||
|
||||
|
@ -80,6 +81,11 @@ public class CodeSystemUtilities {
|
|||
PropertyType.BOOLEAN);
|
||||
}
|
||||
|
||||
|
||||
public static Coding readCoding(String jurisdiction) {
|
||||
return jurisdiction == null || !jurisdiction.contains("#") ? null : new Coding().setCode(jurisdiction.substring(jurisdiction.indexOf("#")+1)).setSystem(jurisdiction.substring(0, jurisdiction.indexOf("#")));
|
||||
}
|
||||
|
||||
public enum ConceptStatus {
|
||||
Active, Experimental, Deprecated, Retired;
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,6 +2,7 @@ package org.hl7.fhir.r5.conformance;
|
|||
|
||||
import org.hl7.fhir.r5.model.CanonicalType;
|
||||
import org.hl7.fhir.r5.model.ElementDefinition;
|
||||
import org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionConstraintComponent;
|
||||
import org.hl7.fhir.r5.model.ElementDefinition.TypeRefComponent;
|
||||
import org.hl7.fhir.r5.model.Resource;
|
||||
import org.hl7.fhir.r5.model.StructureDefinition;
|
||||
|
@ -49,6 +50,18 @@ public class StructureDefinitionHacker {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (VersionUtilities.isR4Ver(version) && "http://hl7.org/fhir/StructureDefinition/Consent".equals(sd.getUrl())) {
|
||||
for (ElementDefinition ed : sd.getSnapshot().getElement()) {
|
||||
if ("Consent.identifier".equals(ed.getPath())) {
|
||||
ed.getExampleFirstRep().getValueIdentifier().setSystem("http://acme.org/identifier/local/eCMS");
|
||||
}
|
||||
}
|
||||
for (ElementDefinition ed : sd.getDifferential().getElement()) {
|
||||
if ("Consent.identifier".equals(ed.getPath())) {
|
||||
ed.getExampleFirstRep().getValueIdentifier().setSystem("http://acme.org/identifier/local/eCMS");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sd.getUrl().startsWith("http://hl7.org/fhir/uv/subscriptions-backport")) {
|
||||
for (ElementDefinition ed : sd.getDifferential().getElement()) {
|
||||
fixMarkdownR4BURLs(ed);
|
||||
|
@ -57,9 +70,25 @@ public class StructureDefinitionHacker {
|
|||
fixMarkdownR4BURLs(ed);
|
||||
}
|
||||
}
|
||||
if ("http://hl7.org/fhir/StructureDefinition/vitalsigns".equals(sd.getUrl()) || "http://hl7.org/fhir/StructureDefinition/vitalsigns".equals(sd.getBaseDefinition())) {
|
||||
for (ElementDefinition ed : sd.getDifferential().getElement()) {
|
||||
checkVSConstraint(ed);
|
||||
}
|
||||
for (ElementDefinition ed : sd.getSnapshot().getElement()) {
|
||||
checkVSConstraint(ed);
|
||||
}
|
||||
}
|
||||
return sd;
|
||||
}
|
||||
|
||||
private void checkVSConstraint(ElementDefinition ed) {
|
||||
for (ElementDefinitionConstraintComponent constraint : ed.getConstraint()) {
|
||||
if ("vs-1".equals(constraint.getKey())) {
|
||||
constraint.setExpression("$this is dateTime implies $this.toString().length() >= 10");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void fixMarkdownR4BURLs(ElementDefinition ed) {
|
||||
if (ed.hasDefinition()) {
|
||||
ed.setDefinition(ed.getDefinition().replace("http://hl7.org/fhir/R4B/", "http://hl7.org/fhir/R4/"));
|
||||
|
|
|
@ -2508,18 +2508,36 @@ public class ProfileUtilities extends TranslatingUtilities {
|
|||
derived.getPattern().setUserData(UD_DERIVATION_EQUALS, true);
|
||||
}
|
||||
|
||||
List<ElementDefinitionExampleComponent> toDelB = new ArrayList<>();
|
||||
List<ElementDefinitionExampleComponent> toDelD = new ArrayList<>();
|
||||
for (ElementDefinitionExampleComponent ex : derived.getExample()) {
|
||||
boolean found = false;
|
||||
for (ElementDefinitionExampleComponent exS : base.getExample())
|
||||
if (Base.compareDeep(ex, exS, false))
|
||||
found = true;
|
||||
if (!found)
|
||||
base.addExample(ex.copy());
|
||||
else if (trimDifferential)
|
||||
derived.getExample().remove(ex);
|
||||
else
|
||||
ex.setUserData(UD_DERIVATION_EQUALS, true);
|
||||
boolean delete = ex.hasExtension(ToolingExtensions.EXT_ED_SUPPRESS);
|
||||
if (delete && "$all".equals(ex.getLabel())) {
|
||||
toDelB.addAll(base.getExample());
|
||||
} else {
|
||||
boolean found = false;
|
||||
for (ElementDefinitionExampleComponent exS : base.getExample()) {
|
||||
if (Base.compareDeep(ex.getLabel(), exS.getLabel(), false) && Base.compareDeep(ex.getValue(), exS.getValue(), false)) {
|
||||
if (delete) {
|
||||
toDelB.add(exS);
|
||||
} else {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (delete) {
|
||||
toDelD.add(ex);
|
||||
} else if (!found) {
|
||||
base.addExample(ex.copy());
|
||||
} else if (trimDifferential) {
|
||||
derived.getExample().remove(ex);
|
||||
} else {
|
||||
ex.setUserData(UD_DERIVATION_EQUALS, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
base.getExample().removeAll(toDelB);
|
||||
derived.getExample().removeAll(toDelD);
|
||||
|
||||
if (derived.hasMaxLengthElement()) {
|
||||
if (!Base.compareDeep(derived.getMaxLengthElement(), base.getMaxLengthElement(), false))
|
||||
|
|
|
@ -2856,6 +2856,14 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
|
|||
|
||||
@Override
|
||||
public Set<String> urlsForOid(boolean codeSystem, String oid) {
|
||||
Set<String> set = urlsForOid(codeSystem, oid, true);
|
||||
if (set.size() > 1) {
|
||||
set = urlsForOid(codeSystem, oid, false);
|
||||
}
|
||||
return set;
|
||||
}
|
||||
|
||||
public Set<String> urlsForOid(boolean codeSystem, String oid, boolean retired) {
|
||||
if (oid == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -2869,14 +2877,17 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
|
|||
}
|
||||
if (os.db != null) {
|
||||
try {
|
||||
PreparedStatement psql = os.db.prepareStatement("Select URL from OIDMap where OID = ?");
|
||||
PreparedStatement psql = os.db.prepareStatement("Select URL, Status from OIDMap where OID = ?");
|
||||
psql.setString(1, oid);
|
||||
ResultSet rs = psql.executeQuery();
|
||||
while (rs.next()) {
|
||||
urls.add(rs.getString(1));
|
||||
if (retired || !"retired".equals(rs.getString(2))) {
|
||||
urls.add(rs.getString(1));
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// nothing, there would alreagy have been an error
|
||||
// e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2885,6 +2896,9 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
|
|||
case "2.16.840.1.113883.6.1" :
|
||||
urls.add("http://loinc.org");
|
||||
break;
|
||||
case "2.16.840.1.113883.6.8" :
|
||||
urls.add("http://unitsofmeasure.org");
|
||||
break;
|
||||
case "2.16.840.1.113883.6.96" :
|
||||
urls.add("http://snomed.info/sct");
|
||||
break;
|
||||
|
@ -2896,7 +2910,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte
|
|||
private Connection connectToOidSource(String folder) {
|
||||
try {
|
||||
File ff = new File(folder);
|
||||
File of = new File(Utilities.path(ff.getAbsolutePath(), ".oids.db"));
|
||||
File of = new File(Utilities.path(ff.getAbsolutePath(), ".oid-map.db"));
|
||||
if (!of.exists()) {
|
||||
OidIndexBuilder oidBuilder = new OidIndexBuilder(ff, of);
|
||||
oidBuilder.build();
|
||||
|
|
|
@ -34,9 +34,10 @@ public class OidIndexBuilder {
|
|||
stmt.execute("CREATE TABLE OIDMap (\r\n"+
|
||||
"OID nvarchar NOT NULL,\r\n"+
|
||||
"URL nvarchar NOT NULL,\r\n"+
|
||||
"Status nvarchar NOT NULL,\r\n"+
|
||||
"PRIMARY KEY (OID, URL))\r\n");
|
||||
|
||||
PreparedStatement psql = db.prepareStatement("Insert into OIDMap (OID, URL) values (?, ?)");;
|
||||
PreparedStatement psql = db.prepareStatement("Insert into OIDMap (OID, URL, Status) values (?, ?, ?)");;
|
||||
for (File f : folder.listFiles()) {
|
||||
if (!f.getName().startsWith(".") && f.getName().endsWith(".json")) {
|
||||
try {
|
||||
|
@ -50,6 +51,7 @@ public class OidIndexBuilder {
|
|||
db.close();
|
||||
} catch (Exception e) {
|
||||
System.out.println("Error processing "+folder.getAbsolutePath()+" while generating OIDs: "+e.getMessage());
|
||||
// e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -58,6 +60,7 @@ public class OidIndexBuilder {
|
|||
if (rt != null) {
|
||||
Set<String> oids = new HashSet<String>();
|
||||
String url = null;
|
||||
String status = json.asString("status");
|
||||
if ("NamingSystem".equals(rt)) {
|
||||
for (JsonObject id : json.getJsonObjects("uniqueId")) {
|
||||
String t = id.asString("type");
|
||||
|
@ -70,7 +73,7 @@ public class OidIndexBuilder {
|
|||
}
|
||||
if (url != null) {
|
||||
for (String s : oids) {
|
||||
addOid(psql, matches, s, url);
|
||||
addOid(psql, matches, s, url, status);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -94,7 +97,7 @@ public class OidIndexBuilder {
|
|||
}
|
||||
if (!oids.isEmpty()) {
|
||||
for (String s : oids) {
|
||||
addOid(psql, matches, s, url);
|
||||
addOid(psql, matches, s, url, status);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -102,12 +105,13 @@ public class OidIndexBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
private void addOid(PreparedStatement psql, Set<String> matches, String oid, String url) throws SQLException {
|
||||
private void addOid(PreparedStatement psql, Set<String> matches, String oid, String url, String status) throws SQLException {
|
||||
String key = oid+"@"+url;
|
||||
if (!matches.contains(key)) {
|
||||
matches.add(key);
|
||||
psql.setString(1, oid);
|
||||
psql.setString(2, url);
|
||||
psql.setString(3, status);
|
||||
psql.execute();
|
||||
}
|
||||
|
||||
|
|
|
@ -827,9 +827,15 @@ 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.hasValue()) {
|
||||
if (linkResolver != null && item.getProperty().isReference()) {
|
||||
String ref = linkResolver.resolveReference(getReferenceForElement(item));
|
||||
if (ref != null) {
|
||||
json.externalLink(ref);
|
||||
}
|
||||
}
|
||||
primitiveValue(null, item);
|
||||
else
|
||||
} else
|
||||
json.nullValue();
|
||||
}
|
||||
closeArray();
|
||||
|
@ -844,6 +850,12 @@ public class JsonParser extends ParserBase {
|
|||
if (item.getProperty().isResource()) {
|
||||
prop("resourceType", item.getType(), linkResolver == null ? null : linkResolver.resolveType(item.getType()));
|
||||
}
|
||||
if (linkResolver != null && item.getProperty().isReference()) {
|
||||
String ref = linkResolver.resolveReference(getReferenceForElement(item));
|
||||
if (ref != null) {
|
||||
json.externalLink(ref);
|
||||
}
|
||||
}
|
||||
Set<String> done = new HashSet<String>();
|
||||
for (Element child : item.getChildren()) {
|
||||
compose(path+"."+name+"[]", item, done, child);
|
||||
|
@ -891,6 +903,12 @@ public class JsonParser extends ParserBase {
|
|||
if (element.getProperty().isResource()) {
|
||||
prop("resourceType", element.getType(), linkResolver == null ? null : linkResolver.resolveType(element.getType()));
|
||||
}
|
||||
if (linkResolver != null && element.getProperty().isReference()) {
|
||||
String ref = linkResolver.resolveReference(getReferenceForElement(element));
|
||||
if (ref != null) {
|
||||
json.externalLink(ref);
|
||||
}
|
||||
}
|
||||
Set<String> done = new HashSet<String>();
|
||||
for (Element child : element.getChildren()) {
|
||||
compose(path+"."+element.getName(), element, done, child);
|
||||
|
@ -899,6 +917,7 @@ public class JsonParser extends ParserBase {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean isAllowComments() {
|
||||
return allowComments;
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ public abstract class ParserBase {
|
|||
String resolveType(String type);
|
||||
String resolveProperty(Property property);
|
||||
String resolvePage(String string);
|
||||
String resolveReference(String referenceForElement);
|
||||
}
|
||||
|
||||
public enum ValidationPolicy { NONE, QUICK, EVERYTHING }
|
||||
|
@ -296,4 +297,11 @@ public abstract class ParserBase {
|
|||
this.signatureServices = signatureServices;
|
||||
}
|
||||
|
||||
protected String getReferenceForElement(Element element) {
|
||||
if (element.isPrimitive()) {
|
||||
return element.primitiveValue();
|
||||
} else {
|
||||
return element.getNamedChildValue("reference");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -619,5 +619,24 @@ public class Property {
|
|||
return sd.getSnapshot().getElementFirstRep().getPath();
|
||||
}
|
||||
|
||||
|
||||
public boolean isReference() {
|
||||
if (type != null) {
|
||||
return isRef(type);
|
||||
}
|
||||
for (TypeRefComponent tr : definition.getType()) {
|
||||
boolean ref = isRef(tr);
|
||||
if (ref) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private boolean isRef(TypeRefComponent tr) {
|
||||
return Utilities.existsInList(tr.getWorkingCode(), "Reference", "url", "uri", "canonical");
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -790,6 +790,12 @@ public class XmlParser extends ParserBase {
|
|||
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);
|
||||
} else if (!element.hasChildren() && !element.hasValue()) {
|
||||
|
@ -820,6 +826,12 @@ public class XmlParser extends ParserBase {
|
|||
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);
|
||||
|
@ -854,11 +866,18 @@ public class XmlParser extends ParserBase {
|
|||
xml.namespace(element.getProperty().getXmlNamespace(), abbrev);
|
||||
}
|
||||
xml.enter(element.getProperty().getXmlNamespace(), elementName);
|
||||
|
||||
if (!root && element.getSpecial() != null) {
|
||||
if (linkResolver != null)
|
||||
xml.link(linkResolver.resolveProperty(element.getProperty()));
|
||||
xml.enter(element.getProperty().getXmlNamespace(),element.getType());
|
||||
}
|
||||
if (linkResolver != null && element.getProperty().isReference()) {
|
||||
String ref = linkResolver.resolveReference(getReferenceForElement(element));
|
||||
if (ref != null) {
|
||||
xml.externalLink(ref);
|
||||
}
|
||||
}
|
||||
for (Element child : element.getChildren()) {
|
||||
if (wantCompose(element.getPath(), child)) {
|
||||
if (isText(child.getProperty())) {
|
||||
|
|
|
@ -70,4 +70,5 @@ public interface JsonCreator {
|
|||
// only used by an creator that actually produces xhtml
|
||||
void link(String href);
|
||||
void anchor(String string);
|
||||
void externalLink(String string);
|
||||
}
|
|
@ -260,6 +260,11 @@ public class JsonCreatorCanonical implements JsonCreator {
|
|||
jj.endArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void comment(String content) {
|
||||
// canonical JSON ignores comments
|
||||
}
|
||||
|
||||
@Override
|
||||
public void link(String href) {
|
||||
// not used
|
||||
|
@ -271,9 +276,8 @@ public class JsonCreatorCanonical implements JsonCreator {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void comment(String content) {
|
||||
// canonical JSON ignores comments
|
||||
|
||||
public void externalLink(String string) {
|
||||
// not used
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -239,4 +239,8 @@ public class JsonCreatorDirect implements JsonCreator {
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void externalLink(String string) {
|
||||
// not used
|
||||
}
|
||||
}
|
|
@ -119,7 +119,12 @@ public class JsonCreatorGson implements JsonCreator {
|
|||
@Override
|
||||
public void comment(String content) {
|
||||
// gson (dense json) ignores comments
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void externalLink(String string) {
|
||||
// not used
|
||||
}
|
||||
|
||||
}
|
|
@ -366,137 +366,160 @@ public class ProfileDrivenRenderer extends ResourceRenderer {
|
|||
x = renderCommentsSpan(x, e);
|
||||
}
|
||||
|
||||
if (e instanceof StringType)
|
||||
x.addText(((StringType) e).getValue());
|
||||
else if (e instanceof CodeType)
|
||||
x.addText(((CodeType) e).getValue());
|
||||
else if (e instanceof IdType)
|
||||
x.addText(((IdType) e).getValue());
|
||||
else if (e instanceof Extension)
|
||||
return;
|
||||
else if (e instanceof InstantType)
|
||||
x.addText(((InstantType) e).toHumanDisplay());
|
||||
else if (e instanceof DateTimeType) {
|
||||
renderDateTime(x, e);
|
||||
} else if (e instanceof Base64BinaryType) {
|
||||
Base64BinaryType b64 = (Base64BinaryType) e;
|
||||
x.addText("(base64 data - "+(b64.getValue() == null ? "0" : b64.getValue().length)+" bytes)");
|
||||
} else if (e instanceof org.hl7.fhir.r5.model.DateType) {
|
||||
org.hl7.fhir.r5.model.DateType dt = ((org.hl7.fhir.r5.model.DateType) e);
|
||||
renderDate(x, dt);
|
||||
} else if (e instanceof Enumeration) {
|
||||
Object ev = ((Enumeration<?>) e).getValue();
|
||||
x.addText(ev == null ? "" : ev.toString()); // todo: look up a display name if there is one
|
||||
} else if (e instanceof BooleanType) {
|
||||
x.addText(((BooleanType) e).getValue().toString());
|
||||
} else if (e instanceof CodeableConcept) {
|
||||
renderCodeableConcept(x, (CodeableConcept) e, showCodeDetails);
|
||||
} else if (e instanceof Coding) {
|
||||
renderCoding(x, (Coding) e, showCodeDetails);
|
||||
} else if (e instanceof CodeableReference) {
|
||||
renderCodeableReference(x, (CodeableReference) e, showCodeDetails);
|
||||
} else if (e instanceof Annotation) {
|
||||
renderAnnotation(x, (Annotation) e);
|
||||
} else if (e instanceof Identifier) {
|
||||
renderIdentifier(x, (Identifier) e);
|
||||
} else if (e instanceof org.hl7.fhir.r5.model.IntegerType) {
|
||||
if (((org.hl7.fhir.r5.model.IntegerType) e).hasValue()) {
|
||||
x.addText(Integer.toString(((org.hl7.fhir.r5.model.IntegerType) e).getValue()));
|
||||
} else {
|
||||
x.addText("??");
|
||||
}
|
||||
} else if (e instanceof org.hl7.fhir.r5.model.Integer64Type) {
|
||||
if (((org.hl7.fhir.r5.model.Integer64Type) e).hasValue()) {
|
||||
x.addText(Long.toString(((org.hl7.fhir.r5.model.Integer64Type) e).getValue()));
|
||||
} else {
|
||||
x.addText("??");
|
||||
}
|
||||
} else if (e instanceof org.hl7.fhir.r5.model.DecimalType) {
|
||||
x.addText(((org.hl7.fhir.r5.model.DecimalType) e).getValue().toString());
|
||||
} else if (e instanceof HumanName) {
|
||||
renderHumanName(x, (HumanName) e);
|
||||
} else if (e instanceof SampledData) {
|
||||
renderSampledData(x, (SampledData) e);
|
||||
} else if (e instanceof Address) {
|
||||
renderAddress(x, (Address) e);
|
||||
} else if (e instanceof ContactPoint) {
|
||||
renderContactPoint(x, (ContactPoint) e);
|
||||
} else if (e instanceof Expression) {
|
||||
renderExpression(x, (Expression) e);
|
||||
} else if (e instanceof Money) {
|
||||
renderMoney(x, (Money) e);
|
||||
} else if (e instanceof ContactDetail) {
|
||||
ContactDetail cd = (ContactDetail) e;
|
||||
if (cd.hasName()) {
|
||||
x.tx(cd.getName()+": ");
|
||||
}
|
||||
boolean first = true;
|
||||
for (ContactPoint c : cd.getTelecom()) {
|
||||
if (first) first = false; else x.tx(",");
|
||||
renderContactPoint(x, c);
|
||||
}
|
||||
} else if (e instanceof UriType) {
|
||||
renderUri(x, (UriType) e, defn.getPath(), rcontext != null && rcontext.getResource() != null ? rcontext.getResource().getId() : null, res.getResource());
|
||||
} else if (e instanceof Timing) {
|
||||
renderTiming(x, (Timing) e);
|
||||
} else if (e instanceof Range) {
|
||||
renderRange(x, (Range) e);
|
||||
} else if (e instanceof Quantity) {
|
||||
renderQuantity(x, (Quantity) e, showCodeDetails);
|
||||
} else if (e instanceof Ratio) {
|
||||
renderQuantity(x, ((Ratio) e).getNumerator(), showCodeDetails);
|
||||
x.tx("/");
|
||||
renderQuantity(x, ((Ratio) e).getDenominator(), showCodeDetails);
|
||||
} else if (e instanceof Period) {
|
||||
Period p = (Period) e;
|
||||
renderPeriod(x, p);
|
||||
} else if (e instanceof Reference) {
|
||||
Reference r = (Reference) e;
|
||||
if (r.getReference() != null && r.getReference().contains("#")) {
|
||||
if (containedIds.contains(r.getReference().substring(1))) {
|
||||
x.ah(r.getReference()).tx("See "+r.getReference());
|
||||
} else {
|
||||
// in this case, we render the resource in line
|
||||
ResourceWrapper rw = null;
|
||||
for (ResourceWrapper t : res.getContained()) {
|
||||
if (r.getReference().substring(1).equals(t.getId())) {
|
||||
rw = t;
|
||||
}
|
||||
}
|
||||
if (rw == null) {
|
||||
renderReference(res, x, r);
|
||||
} else {
|
||||
String ref = context.getResolver() != null ?context.getResolver().urlForContained(context, res.fhirType(), res.getId(), rw.fhirType(), rw.getId()) : null;
|
||||
if (ref == null) {
|
||||
x.an(rw.getId());
|
||||
RenderingContext ctxtc = context.copy();
|
||||
ctxtc.setAddGeneratedNarrativeHeader(false);
|
||||
ctxtc.setContained(true);
|
||||
ResourceRenderer rr = RendererFactory.factory(rw, ctxtc);
|
||||
rr.setRcontext(new ResourceContext(rcontext, rw));
|
||||
rr.render(parent.blockquote(), rw);
|
||||
} else {
|
||||
x.ah(ref).tx("See "+rw.fhirType());
|
||||
}
|
||||
}
|
||||
if (e instanceof PrimitiveType) {
|
||||
PrimitiveType<?> p = (PrimitiveType<?>) e;
|
||||
if (!p.hasValue()) {
|
||||
if (p.hasExtension(ToolingExtensions.EXT_DAR)) {
|
||||
x.tx("Absent because : ");
|
||||
x.code().tx(p.getExtensionString(ToolingExtensions.EXT_DAR));
|
||||
} else if (p.hasExtension(ToolingExtensions.EXT_NF)) {
|
||||
x.tx("Null because: ");
|
||||
x.code().tx(p.getExtensionString(ToolingExtensions.EXT_NF));
|
||||
} else if (p.hasExtension(ToolingExtensions.EXT_OT)) {
|
||||
x.code().tx("Text: ");
|
||||
x.tx(p.getExtensionString(ToolingExtensions.EXT_OT));
|
||||
} else if (p.hasExtension(ToolingExtensions.EXT_CQF_EXP)) {
|
||||
x.code().tx("Value calculated by: ");
|
||||
Expression exp = p.getExtensionByUrl(ToolingExtensions.EXT_CQF_EXP).getValueExpression();
|
||||
x.tx(p.getExtensionString(ToolingExtensions.EXT_OT));
|
||||
renderExpression(x, exp);
|
||||
} else {
|
||||
x.addText("??");
|
||||
}
|
||||
} else {
|
||||
renderReference(res, x, r);
|
||||
} else if (e instanceof StringType)
|
||||
x.addText(((StringType) e).getValue());
|
||||
else if (e instanceof CodeType)
|
||||
x.addText(((CodeType) e).getValue());
|
||||
else if (e instanceof IdType)
|
||||
x.addText(((IdType) e).getValue());
|
||||
else if (e instanceof InstantType)
|
||||
x.addText(((InstantType) e).toHumanDisplay());
|
||||
else if (e instanceof DateTimeType) {
|
||||
renderDateTime(x, e);
|
||||
} else if (e instanceof Base64BinaryType) {
|
||||
Base64BinaryType b64 = (Base64BinaryType) e;
|
||||
x.addText("(base64 data - "+(b64.getValue() == null ? "0" : b64.getValue().length)+" bytes)");
|
||||
} else if (e instanceof org.hl7.fhir.r5.model.DateType) {
|
||||
org.hl7.fhir.r5.model.DateType dt = ((org.hl7.fhir.r5.model.DateType) e);
|
||||
renderDate(x, dt);
|
||||
} else if (e instanceof Enumeration) {
|
||||
Object ev = ((Enumeration<?>) e).getValue();
|
||||
x.addText(ev == null ? "" : ev.toString()); // todo: look up a display name if there is one
|
||||
} else if (e instanceof org.hl7.fhir.r5.model.IntegerType) {
|
||||
if (((org.hl7.fhir.r5.model.IntegerType) e).hasValue()) {
|
||||
x.addText(Integer.toString(((org.hl7.fhir.r5.model.IntegerType) e).getValue()));
|
||||
} else {
|
||||
x.addText("??");
|
||||
}
|
||||
} else if (e instanceof org.hl7.fhir.r5.model.Integer64Type) {
|
||||
if (((org.hl7.fhir.r5.model.Integer64Type) e).hasValue()) {
|
||||
x.addText(Long.toString(((org.hl7.fhir.r5.model.Integer64Type) e).getValue()));
|
||||
} else {
|
||||
x.addText("??");
|
||||
}
|
||||
} else if (e instanceof org.hl7.fhir.r5.model.DecimalType) {
|
||||
x.addText(((org.hl7.fhir.r5.model.DecimalType) e).getValue().toString());
|
||||
} else if (e instanceof UriType) {
|
||||
renderUri(x, (UriType) e, defn.getPath(), rcontext != null && rcontext.getResource() != null ? rcontext.getResource().getId() : null, res.getResource());
|
||||
} else if (e instanceof BooleanType) {
|
||||
x.addText(((BooleanType) e).getValue().toString());
|
||||
} else { // e instanceof PrimitiveType
|
||||
x.tx(((PrimitiveType) e).primitiveValue());
|
||||
}
|
||||
} else {
|
||||
if (e instanceof Extension) {
|
||||
return;
|
||||
} else if (e instanceof CodeableConcept) {
|
||||
renderCodeableConcept(x, (CodeableConcept) e, showCodeDetails);
|
||||
} else if (e instanceof Coding) {
|
||||
renderCoding(x, (Coding) e, showCodeDetails);
|
||||
} else if (e instanceof CodeableReference) {
|
||||
renderCodeableReference(x, (CodeableReference) e, showCodeDetails);
|
||||
} else if (e instanceof Annotation) {
|
||||
renderAnnotation(x, (Annotation) e);
|
||||
} else if (e instanceof Identifier) {
|
||||
renderIdentifier(x, (Identifier) e);
|
||||
} else if (e instanceof HumanName) {
|
||||
renderHumanName(x, (HumanName) e);
|
||||
} else if (e instanceof SampledData) {
|
||||
renderSampledData(x, (SampledData) e);
|
||||
} else if (e instanceof Address) {
|
||||
renderAddress(x, (Address) e);
|
||||
} else if (e instanceof ContactPoint) {
|
||||
renderContactPoint(x, (ContactPoint) e);
|
||||
} else if (e instanceof Expression) {
|
||||
renderExpression(x, (Expression) e);
|
||||
} else if (e instanceof Money) {
|
||||
renderMoney(x, (Money) e);
|
||||
} else if (e instanceof ContactDetail) {
|
||||
ContactDetail cd = (ContactDetail) e;
|
||||
if (cd.hasName()) {
|
||||
x.tx(cd.getName()+": ");
|
||||
}
|
||||
boolean first = true;
|
||||
for (ContactPoint c : cd.getTelecom()) {
|
||||
if (first) first = false; else x.tx(",");
|
||||
renderContactPoint(x, c);
|
||||
}
|
||||
} else if (e instanceof Timing) {
|
||||
renderTiming(x, (Timing) e);
|
||||
} else if (e instanceof Range) {
|
||||
renderRange(x, (Range) e);
|
||||
} else if (e instanceof Quantity) {
|
||||
renderQuantity(x, (Quantity) e, showCodeDetails);
|
||||
} else if (e instanceof Ratio) {
|
||||
renderQuantity(x, ((Ratio) e).getNumerator(), showCodeDetails);
|
||||
x.tx("/");
|
||||
renderQuantity(x, ((Ratio) e).getDenominator(), showCodeDetails);
|
||||
} else if (e instanceof Period) {
|
||||
Period p = (Period) e;
|
||||
renderPeriod(x, p);
|
||||
} else if (e instanceof Reference) {
|
||||
Reference r = (Reference) e;
|
||||
if (r.getReference() != null && r.getReference().contains("#")) {
|
||||
if (containedIds.contains(r.getReference().substring(1))) {
|
||||
x.ah(r.getReference()).tx("See "+r.getReference());
|
||||
} else {
|
||||
// in this case, we render the resource in line
|
||||
ResourceWrapper rw = null;
|
||||
for (ResourceWrapper t : res.getContained()) {
|
||||
if (r.getReference().substring(1).equals(t.getId())) {
|
||||
rw = t;
|
||||
}
|
||||
}
|
||||
if (rw == null) {
|
||||
renderReference(res, x, r);
|
||||
} else {
|
||||
String ref = context.getResolver() != null ?context.getResolver().urlForContained(context, res.fhirType(), res.getId(), rw.fhirType(), rw.getId()) : null;
|
||||
if (ref == null) {
|
||||
x.an(rw.getId());
|
||||
RenderingContext ctxtc = context.copy();
|
||||
ctxtc.setAddGeneratedNarrativeHeader(false);
|
||||
ctxtc.setContained(true);
|
||||
ResourceRenderer rr = RendererFactory.factory(rw, ctxtc);
|
||||
rr.setRcontext(new ResourceContext(rcontext, rw));
|
||||
rr.render(parent.blockquote(), rw);
|
||||
} else {
|
||||
x.ah(ref).tx("See "+rw.fhirType());
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
renderReference(res, x, r);
|
||||
}
|
||||
} else if (e instanceof Resource) {
|
||||
return;
|
||||
} else if (e instanceof DataRequirement) {
|
||||
DataRequirement p = (DataRequirement) e;
|
||||
renderDataRequirement(x, p);
|
||||
} else if (e instanceof UsageContext) {
|
||||
UsageContext p = (UsageContext) e;
|
||||
renderUsageContext(x, p);
|
||||
} else if (e instanceof ElementDefinition) {
|
||||
x.tx("todo-bundle");
|
||||
} else if (e != null && !(e instanceof Attachment) && !(e instanceof Narrative) && !(e instanceof Meta) && !(e instanceof ProductShelfLife) && !(e instanceof RelatedArtifact)) {
|
||||
throw new NotImplementedException("type "+e.fhirType()+" not handled. This may be due to unresolved inter-version compatibility issues");
|
||||
}
|
||||
} else if (e instanceof Resource) {
|
||||
return;
|
||||
} else if (e instanceof DataRequirement) {
|
||||
DataRequirement p = (DataRequirement) e;
|
||||
renderDataRequirement(x, p);
|
||||
} else if (e instanceof UsageContext) {
|
||||
UsageContext p = (UsageContext) e;
|
||||
renderUsageContext(x, p);
|
||||
} else if (e instanceof PrimitiveType) {
|
||||
x.tx(((PrimitiveType) e).primitiveValue());
|
||||
} else if (e instanceof ElementDefinition) {
|
||||
x.tx("todo-bundle");
|
||||
} else if (e != null && !(e instanceof Attachment) && !(e instanceof Narrative) && !(e instanceof Meta) && !(e instanceof ProductShelfLife) && !(e instanceof RelatedArtifact)) {
|
||||
throw new NotImplementedException("type "+e.fhirType()+" not handled. This may be due to unresolved inter-version compatibility issues");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1507,7 +1507,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
|
|||
if (lt == null || !lt.hasValueBooleanType()) {
|
||||
if (!c.getPieces().isEmpty()) { c.addPiece(gen.new Piece("br")); }
|
||||
c.addPiece(gen.new Piece(null, "Instances of this logical model are not marked to be the target of a Reference", null).addStyle("font-weight:bold")); ;
|
||||
} else if (lt.getValue().hasExtension(ToolingExtensions.DAR)) {
|
||||
} else if (lt.getValue().hasExtension(ToolingExtensions.EXT_DAR)) {
|
||||
} else if (!lt.getValueBooleanType().hasValue()) {
|
||||
if (!c.getPieces().isEmpty()) { c.addPiece(gen.new Piece("br")); }
|
||||
c.addPiece(gen.new Piece(null, "Instances of this logical model are not marked to be the target of a Reference", null).addStyle("font-weight:bold")); ;
|
||||
|
@ -3565,7 +3565,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
|
|||
Extension lt = ToolingExtensions.getExtension(sd, ToolingExtensions.EXT_LOGICAL_TARGET);
|
||||
if (lt == null || !lt.hasValue()) {
|
||||
tableRow(tbl, "Logical Model", null, strikethrough, "Instances of this logical model are not marked to be the target of a Reference");
|
||||
} else if (lt.getValue().hasExtension(ToolingExtensions.DAR)) {
|
||||
} else if (lt.getValue().hasExtension(ToolingExtensions.EXT_DAR)) {
|
||||
} else if (lt.getValueBooleanType().hasValue()) {
|
||||
tableRow(tbl, "Logical Model", null, strikethrough, "Instances of this logical model are not marked to be the target of a Reference");
|
||||
} else if (lt.getValueBooleanType().booleanValue()) {
|
||||
|
|
|
@ -99,7 +99,7 @@ public class StructureDefinitionSpreadsheetGenerator extends CanonicalSpreadshee
|
|||
addStructureDefinitionMetadata(renderCanonicalResource(sd, forMultiple), sd);
|
||||
Sheet sheet = forMultiple && hasSheet("Elements") ? getSheet("Elements") : makeSheet("Elements");
|
||||
|
||||
if (sheet.getLastRowNum() == 0) {
|
||||
if (sheet.getPhysicalNumberOfRows() == 0) {
|
||||
Row headerRow = sheet.createRow(0);
|
||||
int coffset = forMultiple ? 1 : 0;
|
||||
for (int i = 0; i < titles.length; i++) {
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package org.hl7.fhir.r5.terminologies;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.r5.model.CodeableConcept;
|
||||
import org.hl7.fhir.r5.model.Coding;
|
||||
import org.hl7.fhir.utilities.Utilities;
|
||||
|
||||
|
@ -6015,5 +6019,16 @@ public class JurisdictionUtilities {
|
|||
public static boolean isJurisdiction(String system) {
|
||||
return Utilities.existsInList(system, "http://unstats.un.org/unsd/methods/m49/m49.htm", "urn:iso:std:iso:3166", "urn:iso:std:iso:3166:-2");
|
||||
}
|
||||
|
||||
public static void setJurisdictionCountry(List<CodeableConcept> list, String code) {
|
||||
CodeableConcept cc = new CodeableConcept();
|
||||
cc.addCoding().setCode(code).setSystem("urn:iso:std:iso:3166");
|
||||
String disp = country(cc.getCodingFirstRep());
|
||||
if (disp.contains("Unknown country")) {
|
||||
throw new FHIRException(disp);
|
||||
}
|
||||
list.clear();
|
||||
list.add(cc);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -146,7 +146,10 @@ public class ToolingExtensions {
|
|||
public static final String EXT_CS_ALTERNATE_STATUS = "http://hl7.org/fhir/StructureDefinition/alternate-code-status";
|
||||
public static final String EXT_OBLIGATION_PROFILE_FLAG = "http://hl7.org/fhir/tools/StructureDefinition/obligation-profile";
|
||||
public static final String EXT_OBLIGATION_INHERITS = "http://hl7.org/fhir/tools/StructureDefinition/inherit-obligations";
|
||||
public static final String DAR = "http://hl7.org/fhir/StructureDefinition/data-absent-reason";
|
||||
public static final String EXT_DAR = "http://hl7.org/fhir/StructureDefinition/data-absent-reason";
|
||||
public static final String EXT_NF = "http://hl7.org/fhir/StructureDefinition/iso21090-nullFlavor";
|
||||
public static final String EXT_OT = "http://hl7.org/fhir/StructureDefinition/originalText";
|
||||
public static final String EXT_CQF_EXP = "http://hl7.org/fhir/StructureDefinition/cqf-expression";
|
||||
|
||||
|
||||
// validated
|
||||
|
@ -261,7 +264,8 @@ public class ToolingExtensions {
|
|||
public static final String EXT_RESOURCE_NAME = "http://hl7.org/fhir/StructureDefinition/resource-instance-name";
|
||||
public static final String EXT_RESOURCE_DESC = "http://hl7.org/fhir/StructureDefinition/resource-instance-description";
|
||||
public static final String EXT_ARTIFACT_NAME = "http://hl7.org/fhir/StructureDefinition/artifact-name";
|
||||
public static final String EXT_ARTIFACT_DESC = "http://hl7.org/fhir/StructureDefinition/artifact-description";
|
||||
public static final String EXT_ARTIFACT_DESC = "http://hl7.org/fhir/StructureDefinition/artifact-description";
|
||||
public static final String EXT_ED_SUPPRESS = "http://hl7.org/fhir/StructureDefinition/elementdefinition-suppress";
|
||||
|
||||
// specific extension helpers
|
||||
|
||||
|
|
|
@ -444,6 +444,7 @@ public class Runner implements IEvaluationContext {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
|
||||
throw new Error("Not implemented yet: resolveReference");
|
||||
|
|
|
@ -54,7 +54,7 @@ public class Validator {
|
|||
|
||||
|
||||
public void checkViewDefinition(String path, JsonObject viewDefinition) {
|
||||
checkProperties(viewDefinition, path, "url", "identifier", "name", "version", "title", "status", "experimental", "date", "publisher", "contact", "description", "useContext", "copyright", "resource", "constant", "select", "where");
|
||||
checkProperties(viewDefinition, path, "resourceType", "url", "identifier", "name", "version", "title", "status", "experimental", "date", "publisher", "contact", "description", "useContext", "copyright", "resource", "constant", "select", "where");
|
||||
|
||||
JsonElement nameJ = viewDefinition.get("name");
|
||||
if (nameJ == null) {
|
||||
|
@ -310,9 +310,9 @@ public class Validator {
|
|||
}
|
||||
if (isColl) {
|
||||
if (arrays == null) {
|
||||
warning(path, expression, "column appears to be a collection. Collections are not supported in all Runners");
|
||||
warning(path, expression, "The column '"+columnName+"' appears to be a collection based on it's path. Collections are not supported in all execution contexts");
|
||||
} else if (!arrays) {
|
||||
warning(path, expression, "column appears to be a collection, but this is not allowed in this context");
|
||||
warning(path, expression, "The column '"+columnName+"' appears to be a collection based on it's path, but this is not allowed in the current execution context");
|
||||
}
|
||||
}
|
||||
Set<String> types = new HashSet<>();
|
||||
|
@ -574,7 +574,7 @@ public class Validator {
|
|||
nameOk = nameOk || name.equals(p.getName());
|
||||
}
|
||||
if (!nameOk) {
|
||||
error(path+"."+p.getName(), p.getValue(), "Unknown JSON "+p.getValue().type().name(), IssueType.UNKNOWN);
|
||||
error(path+"."+p.getName(), p.getValue(), "Unknown JSON property "+p.getName(), IssueType.UNKNOWN);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1974,6 +1974,14 @@ public class Utilities {
|
|||
return res;
|
||||
}
|
||||
|
||||
public static String getRelativeUrlPath(String root, String path) {
|
||||
String res = path.substring(root.length());
|
||||
if (res.startsWith("/")) {
|
||||
res = res.substring(1);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public static List<String> listAllFiles(String path, List<String> ignoreList) {
|
||||
List<String> res = new ArrayList<>();
|
||||
addAllFiles(res, path, new File(path), ignoreList);
|
||||
|
|
|
@ -1014,6 +1014,7 @@ public class I18nConstants {
|
|||
public static final String CDA_UNKNOWN_TEMPLATE_EXT = "CDA_UNKNOWN_TEMPLATE_EXT";
|
||||
public static final String UNABLE_TO_DETERMINE_TYPE_CONTEXT_INV = "UNABLE_TO_DETERMINE_TYPE_CONTEXT_INV";
|
||||
public static final String ED_CONTEXT_INVARIANT_EXPRESSION_ERROR = "ED_CONTEXT_INVARIANT_EXPRESSION_ERROR";
|
||||
public static final String VALIDATION_VAL_PROFILE_SIGNPOST_OBS = "VALIDATION_VAL_PROFILE_SIGNPOST_OBS";
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -103,4 +103,5 @@ public interface IXMLWriter {
|
|||
// 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;
|
||||
}
|
|
@ -907,6 +907,10 @@ public class XMLWriter extends OutputStreamWriter implements IXMLWriter {
|
|||
attribute("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation", ns+" "+loc);
|
||||
|
||||
}
|
||||
@Override
|
||||
public void externalLink(String ref) {
|
||||
// ignore this
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -392,7 +392,7 @@ Unable_to_resolve_name_reference__at_path_ = Unable to resolve name reference {0
|
|||
Details_for__matching_against_Profile_ = Details for {0} matching against profile {1}
|
||||
Does_not_match_slice_ = Does not match slice ''{0}'' (discriminator: {1})
|
||||
Profile__does_not_match_for__because_of_the_following_profile_issues__ = Profile {0} does not match for {1} because of the following profile issues: {2}
|
||||
This_element_does_not_match_any_known_slice_ = This element does not match any known slice {0}
|
||||
This_element_does_not_match_any_known_slice_ = This element does not match any known slice {0} (this may not be a problem, but you should check that it''s not intended to match a slice)
|
||||
defined_in_the_profile = Defined in the profile
|
||||
This_does_not_appear_to_be_a_FHIR_resource_unknown_name_ = This content cannot be parsed (unknown or unrecognized resource name ''{0}'')
|
||||
This_cannot_be_parsed_as_a_FHIR_object_no_name = This content cannot be parsed (no name)
|
||||
|
@ -1070,4 +1070,6 @@ TERMINOLOGY_TX_OID_MULTIPLE_MATCHES = The OID ''{0}'' matches multiple code syst
|
|||
CDA_UNKNOWN_TEMPLATE = The CDA Template {0} is not known
|
||||
CDA_UNKNOWN_TEMPLATE_EXT = The CDA Template {0} / {1} is not known
|
||||
UNABLE_TO_DETERMINE_TYPE_CONTEXT_INV = The types could not be determined from the extension context, so the invariant can't be validated (types = {0})
|
||||
ED_CONTEXT_INVARIANT_EXPRESSION_ERROR = Error in constraint ''{0}'': {1}
|
||||
ED_CONTEXT_INVARIANT_EXPRESSION_ERROR = Error in constraint ''{0}'': {1}
|
||||
VALIDATION_VAL_PROFILE_SIGNPOST_OBS = Validate Observation against {1} profile because the {2} code {3} was found
|
||||
|
|
@ -65,7 +65,9 @@ import org.hl7.fhir.r5.terminologies.ValueSetUtilities;
|
|||
import org.hl7.fhir.r5.utils.ToolingExtensions;
|
||||
import org.hl7.fhir.r5.utils.XVerExtensionManager;
|
||||
import org.hl7.fhir.r5.utils.XVerExtensionManager.XVerExtensionStatus;
|
||||
import org.hl7.fhir.r5.utils.validation.IResourceValidator;
|
||||
import org.hl7.fhir.r5.utils.validation.ValidationContextCarrier.IValidationContextResourceLoader;
|
||||
import org.hl7.fhir.r5.utils.validation.constants.BestPracticeWarningLevel;
|
||||
import org.hl7.fhir.utilities.FhirPublication;
|
||||
import org.hl7.fhir.utilities.StandardsStatus;
|
||||
import org.hl7.fhir.utilities.Utilities;
|
||||
|
@ -166,7 +168,9 @@ public class BaseValidator implements IValidationContextResourceLoader {
|
|||
protected boolean forPublication;
|
||||
protected boolean debug;
|
||||
protected boolean warnOnDraftOrExperimental;
|
||||
protected Set<String> statusWarnings = new HashSet<>();
|
||||
protected Set<String> statusWarnings = new HashSet<>();
|
||||
protected BestPracticeWarningLevel bpWarnings = BestPracticeWarningLevel.Warning;
|
||||
|
||||
|
||||
public BaseValidator(IWorkerContext context, XVerExtensionManager xverManager, boolean debug) {
|
||||
super();
|
||||
|
@ -194,6 +198,7 @@ public class BaseValidator implements IValidationContextResourceLoader {
|
|||
this.debug = parent.debug;
|
||||
this.warnOnDraftOrExperimental = parent.warnOnDraftOrExperimental;
|
||||
this.statusWarnings = parent.statusWarnings;
|
||||
this.bpWarnings = parent.bpWarnings;
|
||||
}
|
||||
|
||||
private boolean doingLevel(IssueSeverity error) {
|
||||
|
@ -1402,4 +1407,29 @@ public class BaseValidator implements IValidationContextResourceLoader {
|
|||
return ok;
|
||||
}
|
||||
|
||||
|
||||
public BestPracticeWarningLevel getBestPracticeWarningLevel() {
|
||||
return bpWarnings;
|
||||
}
|
||||
|
||||
|
||||
protected boolean bpCheck(List<ValidationMessage> errors, IssueType invalid, int line, int col, String literalPath, boolean test, String message, Object... theMessageArguments) {
|
||||
if (bpWarnings != null) {
|
||||
switch (bpWarnings) {
|
||||
case Error:
|
||||
rule(errors, NO_RULE_DATE, invalid, line, col, literalPath, test, message, theMessageArguments);
|
||||
return test;
|
||||
case Warning:
|
||||
warning(errors, NO_RULE_DATE, invalid, line, col, literalPath, test, message, theMessageArguments);
|
||||
return true;
|
||||
case Hint:
|
||||
hint(errors, NO_RULE_DATE, invalid, line, col, literalPath, test, message, theMessageArguments);
|
||||
return true;
|
||||
default: // do nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -128,6 +128,7 @@ import org.hl7.fhir.r5.model.IntegerType;
|
|||
import org.hl7.fhir.r5.model.OperationOutcome.OperationOutcomeIssueComponent;
|
||||
import org.hl7.fhir.r5.model.Period;
|
||||
import org.hl7.fhir.r5.model.PrimitiveType;
|
||||
import org.hl7.fhir.r5.model.Property;
|
||||
import org.hl7.fhir.r5.model.Quantity;
|
||||
import org.hl7.fhir.r5.model.Range;
|
||||
import org.hl7.fhir.r5.model.Ratio;
|
||||
|
@ -203,6 +204,7 @@ import org.hl7.fhir.validation.instance.type.BundleValidator;
|
|||
import org.hl7.fhir.validation.instance.type.CodeSystemValidator;
|
||||
import org.hl7.fhir.validation.instance.type.ConceptMapValidator;
|
||||
import org.hl7.fhir.validation.instance.type.MeasureValidator;
|
||||
import org.hl7.fhir.validation.instance.type.ObservationValidator;
|
||||
import org.hl7.fhir.validation.instance.type.QuestionnaireValidator;
|
||||
import org.hl7.fhir.validation.instance.type.SearchParameterValidator;
|
||||
import org.hl7.fhir.validation.instance.type.StructureDefinitionValidator;
|
||||
|
@ -320,7 +322,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
|
||||
switch (functionName) {
|
||||
case "slice": return new FunctionDetails("Returns the given slice as defined in the given structure definition. If in an invariant, First parameter can be %profile - current profile", 2, 2);
|
||||
default: throw new FHIRException(context.formatMessage(I18nConstants.NOT_DONE_YET_VALIDATORHOSTSERVICESRESOLVEFUNCTION_, functionName));
|
||||
case "getResourceKey" : return new FunctionDetails("Unique Key for resource", 0, 0);
|
||||
case "getReferenceKey" : return new FunctionDetails("Unique Key for resource that is the target of the reference", 0, 1);
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -331,7 +335,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
case "slice":
|
||||
// todo: check parameters
|
||||
return focus;
|
||||
|
||||
|
||||
case "getResourceKey" : return new TypeDetails(CollectionStatus.SINGLETON, "string");
|
||||
case "getReferenceKey" : return new TypeDetails(CollectionStatus.SINGLETON, "string");
|
||||
default: throw new Error(context.formatMessage(I18nConstants.NOT_DONE_YET_VALIDATORHOSTSERVICESCHECKFUNCTION));
|
||||
}
|
||||
}
|
||||
|
@ -339,11 +345,47 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
@Override
|
||||
public List<Base> executeFunction(FHIRPathEngine engine, Object appContext, List<Base> focus, String functionName, List<List<Base>> parameters) {
|
||||
switch (functionName) {
|
||||
case "slice": return executeSlice(engine, appContext, focus, parameters);
|
||||
case "slice": return executeSlice(engine, appContext, focus, parameters);case "getResourceKey" : return executeResourceKey(focus);
|
||||
case "getReferenceKey" : return executeReferenceKey(null, focus, parameters);
|
||||
default: throw new Error(context.formatMessage(I18nConstants.NOT_DONE_YET_VALIDATORHOSTSERVICESEXECUTEFUNCTION));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private List<Base> executeResourceKey(List<Base> focus) {
|
||||
List<Base> base = new ArrayList<Base>();
|
||||
if (focus.size() == 1) {
|
||||
Base res = focus.get(0);
|
||||
base.add(new StringType(res.fhirType()+"/"+res.getIdBase()));
|
||||
}
|
||||
return base;
|
||||
}
|
||||
|
||||
private List<Base> executeReferenceKey(Base rootResource, List<Base> focus, List<List<Base>> parameters) {
|
||||
List<Base> base = new ArrayList<Base>();
|
||||
if (focus.size() == 1) {
|
||||
Base res = focus.get(0);
|
||||
String ref = null;
|
||||
if (res.fhirType().equals("Reference")) {
|
||||
ref = getRef(res);
|
||||
} else if (res.isPrimitive()) {
|
||||
ref = res.primitiveValue();
|
||||
} else {
|
||||
throw new FHIRException("Unable to generate a reference key based on a "+res.fhirType());
|
||||
}
|
||||
base.add(new StringType(ref));
|
||||
}
|
||||
return base;
|
||||
}
|
||||
|
||||
private String getRef(Base res) {
|
||||
Property prop = res.getChildByName("reference");
|
||||
if (prop != null && prop.getValues().size() == 1) {
|
||||
return prop.getValues().get(0).primitiveValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private List<Base> executeSlice(FHIRPathEngine engine, Object appContext, List<Base> focus, List<List<Base>> parameters) {
|
||||
ValidationContext c = (ValidationContext) appContext;
|
||||
|
||||
|
@ -512,7 +554,6 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
private boolean noTerminologyChecks;
|
||||
private boolean hintAboutNonMustSupport;
|
||||
private boolean showMessagesFromReferences;
|
||||
private BestPracticeWarningLevel bpWarnings = BestPracticeWarningLevel.Warning;
|
||||
private String validationLanguage;
|
||||
private boolean baseOnly;
|
||||
private boolean noCheckAggregation;
|
||||
|
@ -716,26 +757,6 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean bpCheck(List<ValidationMessage> errors, IssueType invalid, int line, int col, String literalPath, boolean test, String message, Object... theMessageArguments) {
|
||||
if (bpWarnings != null) {
|
||||
switch (bpWarnings) {
|
||||
case Error:
|
||||
rule(errors, NO_RULE_DATE, invalid, line, col, literalPath, test, message, theMessageArguments);
|
||||
return test;
|
||||
case Warning:
|
||||
warning(errors, NO_RULE_DATE, invalid, line, col, literalPath, test, message, theMessageArguments);
|
||||
return true;
|
||||
case Hint:
|
||||
hint(errors, NO_RULE_DATE, invalid, line, col, literalPath, test, message, theMessageArguments);
|
||||
return true;
|
||||
default: // do nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.hl7.fhir.r5.elementmodel.Element validate(Object appContext, List<ValidationMessage> errors, InputStream stream, FhirFormat format) throws FHIRException {
|
||||
return validate(appContext, errors, stream, format, new ArrayList<>());
|
||||
|
@ -4105,10 +4126,6 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
return null;
|
||||
}
|
||||
|
||||
public BestPracticeWarningLevel getBestPracticeWarningLevel() {
|
||||
return bpWarnings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CheckDisplayOption getCheckDisplay() {
|
||||
return checkDisplay;
|
||||
|
@ -4649,14 +4666,6 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
this.anyExtensionsAllowed = anyExtensionsAllowed;
|
||||
}
|
||||
|
||||
public IResourceValidator setBestPracticeWarningLevel(BestPracticeWarningLevel value) {
|
||||
if (value == null) {
|
||||
bpWarnings = BestPracticeWarningLevel.Warning;
|
||||
} else {
|
||||
bpWarnings = value;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCheckDisplay(CheckDisplayOption checkDisplay) {
|
||||
|
@ -4724,15 +4733,14 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
if (!criteriaElement.getPath().contains("[") && discriminator.contains("[")) {
|
||||
discriminator = discriminator.substring(0, discriminator.indexOf('['));
|
||||
String lastNode = tail(discriminator);
|
||||
type = tail(criteriaElement.getPath()).substring(lastNode.length());
|
||||
type = type.substring(0, 1).toLowerCase() + type.substring(1);
|
||||
type = makeTypeForFHIRPath(criteriaElement.getPath()).substring(lastNode.length());
|
||||
} else if (!criteriaElement.hasType() || criteriaElement.getType().size() == 1) {
|
||||
if (discriminator.contains("["))
|
||||
discriminator = discriminator.substring(0, discriminator.indexOf('['));
|
||||
if (criteriaElement.hasType()) {
|
||||
type = criteriaElement.getType().get(0).getWorkingCode();
|
||||
type = makeTypeForFHIRPath(criteriaElement.getType().get(0).getWorkingCode());
|
||||
} else if (!criteriaElement.getPath().contains(".")) {
|
||||
type = criteriaElement.getPath();
|
||||
type = makeTypeForFHIRPath(criteriaElement.getPath());
|
||||
} else {
|
||||
throw new DefinitionException(context.formatMessage(I18nConstants.DISCRIMINATOR__IS_BASED_ON_TYPE_BUT_SLICE__IN__HAS_NO_TYPES, discriminator, ed.getId(), profile.getVersionedUrl()));
|
||||
}
|
||||
|
@ -4818,6 +4826,25 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
return pass;
|
||||
}
|
||||
|
||||
private String makeTypeForFHIRPath(String type) {
|
||||
if (Utilities.isAbsoluteUrl(type)) {
|
||||
if (type.startsWith("http://hl7.org/fhir/StructureDefinition/")) {
|
||||
return tail(type);
|
||||
} else if (type.startsWith("http://hl7.org/cda/stds/core/StructureDefinition/")) {
|
||||
return "CDA."+tail(type);
|
||||
} else {
|
||||
return tail(type); // todo?
|
||||
}
|
||||
} else {
|
||||
String ptype = type.substring(0, 1).toLowerCase() + type.substring(1);
|
||||
if (context.isPrimitiveType(ptype)) {
|
||||
return ptype;
|
||||
} else {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isBaseDefinition(String url) {
|
||||
boolean b = url.startsWith("http://hl7.org/fhir/") && !url.substring(40).contains("/");
|
||||
return b;
|
||||
|
@ -5425,7 +5452,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
if (element.getType().equals(BUNDLE)) {
|
||||
return new BundleValidator(this, serverBase).validateBundle(errors, element, stack, checkSpecials, valContext, pct, mode) && ok;
|
||||
} else if (element.getType().equals("Observation")) {
|
||||
return validateObservation(errors, element, stack) && ok;
|
||||
return new ObservationValidator(this).validateObservation(valContext, errors, element, stack, pct, mode) && ok;
|
||||
} else if (element.getType().equals("Questionnaire")) {
|
||||
return new QuestionnaireValidator(this, myEnableWhenEvaluator, fpe, questionnaireMode).validateQuestionannaire(errors, element, element, stack) && ok;
|
||||
} else if (element.getType().equals("QuestionnaireResponse")) {
|
||||
|
@ -6814,21 +6841,6 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
return false;
|
||||
}
|
||||
|
||||
private boolean validateObservation(List<ValidationMessage> errors, Element element, NodeStack stack) {
|
||||
boolean ok = true;
|
||||
// all observations should have a subject, a performer, and a time
|
||||
|
||||
ok = bpCheck(errors, IssueType.INVALID, element.line(), element.col(), stack.getLiteralPath(), element.getNamedChild("subject") != null, I18nConstants.ALL_OBSERVATIONS_SHOULD_HAVE_A_SUBJECT) && ok;
|
||||
List<Element> performers = new ArrayList<>();
|
||||
element.getNamedChildren("performer", performers);
|
||||
ok = bpCheck(errors, IssueType.INVALID, element.line(), element.col(), stack.getLiteralPath(), performers.size() > 0, I18nConstants.ALL_OBSERVATIONS_SHOULD_HAVE_A_PERFORMER) && ok;
|
||||
ok = bpCheck(errors, IssueType.INVALID, element.line(), element.col(), stack.getLiteralPath(),
|
||||
element.getNamedChild("effectiveDateTime") != null || element.getNamedChild("effectivePeriod") != null ||
|
||||
element.getNamedChild("effectiveTiming") != null || element.getNamedChild("effectiveInstant") != null,
|
||||
I18nConstants.ALL_OBSERVATIONS_SHOULD_HAVE_AN_EFFECTIVEDATETIME_OR_AN_EFFECTIVEPERIOD, element.getProperty().typeSummary()) && ok;
|
||||
return ok;
|
||||
}
|
||||
|
||||
/*
|
||||
* The actual base entry point for internal use (re-entrant)
|
||||
*/
|
||||
|
@ -7305,5 +7317,13 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
public void setSignatureServices(IDigitalSignatureServices signatureServices) {
|
||||
this.signatureServices = signatureServices;
|
||||
}
|
||||
|
||||
|
||||
public IResourceValidator setBestPracticeWarningLevel(BestPracticeWarningLevel value) {
|
||||
if (value == null) {
|
||||
bpWarnings = BestPracticeWarningLevel.Warning;
|
||||
} else {
|
||||
bpWarnings = value;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
package org.hl7.fhir.validation.instance.type;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.r5.elementmodel.Element;
|
||||
import org.hl7.fhir.r5.model.StructureDefinition;
|
||||
import org.hl7.fhir.r5.model.Base.ValidationMode;
|
||||
import org.hl7.fhir.utilities.Utilities;
|
||||
import org.hl7.fhir.utilities.VersionUtilities;
|
||||
import org.hl7.fhir.utilities.i18n.I18nConstants;
|
||||
import org.hl7.fhir.utilities.validation.ValidationMessage;
|
||||
import org.hl7.fhir.utilities.validation.ValidationMessage.IssueType;
|
||||
import org.hl7.fhir.validation.BaseValidator;
|
||||
import org.hl7.fhir.validation.instance.InstanceValidator;
|
||||
import org.hl7.fhir.validation.instance.PercentageTracker;
|
||||
import org.hl7.fhir.validation.instance.utils.NodeStack;
|
||||
import org.hl7.fhir.validation.instance.utils.ValidationContext;
|
||||
|
||||
public class ObservationValidator extends BaseValidator {
|
||||
|
||||
|
||||
public ObservationValidator(BaseValidator parent) {
|
||||
super(parent);
|
||||
}
|
||||
|
||||
public boolean validateObservation(ValidationContext valContext, List<ValidationMessage> errors, Element element, NodeStack stack, PercentageTracker pct, ValidationMode mode) {
|
||||
boolean ok = true;
|
||||
// all observations should have a subject, a performer, and a time
|
||||
|
||||
ok = bpCheck(errors, IssueType.INVALID, element.line(), element.col(), stack.getLiteralPath(), element.getNamedChild("subject") != null, I18nConstants.ALL_OBSERVATIONS_SHOULD_HAVE_A_SUBJECT) && ok;
|
||||
List<Element> performers = new ArrayList<>();
|
||||
element.getNamedChildren("performer", performers);
|
||||
ok = bpCheck(errors, IssueType.INVALID, element.line(), element.col(), stack.getLiteralPath(), performers.size() > 0, I18nConstants.ALL_OBSERVATIONS_SHOULD_HAVE_A_PERFORMER) && ok;
|
||||
ok = bpCheck(errors, IssueType.INVALID, element.line(), element.col(), stack.getLiteralPath(),
|
||||
element.getNamedChild("effectiveDateTime") != null || element.getNamedChild("effectivePeriod") != null ||
|
||||
element.getNamedChild("effectiveTiming") != null || element.getNamedChild("effectiveInstant") != null,
|
||||
I18nConstants.ALL_OBSERVATIONS_SHOULD_HAVE_AN_EFFECTIVEDATETIME_OR_AN_EFFECTIVEPERIOD, element.getProperty().typeSummary()) && ok;
|
||||
|
||||
// hook in the vital signs
|
||||
if (VersionUtilities.isR4Plus(context.getVersion())) {
|
||||
Element code = element.getNamedChild("code");
|
||||
List<String> codes = new ArrayList<>();
|
||||
if (hasLoincCode(code, codes, "85353-1")) {
|
||||
ok = checkObservationAgainstProfile(valContext, errors, element, stack, "http://hl7.org/fhir/StructureDefinition/vitalspanel", "Vital Signs Panel", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "9279-1", "76170-0", "76172-6", "76171-8", "19840-8", "33438-3", "76270-8", "11291-2")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/resprate", "Respiratory Rate", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "60978-4", "73795-7", "73799-9", "76476-1", "76477-9", "8867-4", "8889-8", "8890-6", "8891-4", "8892-2", "8893-0", "40443-4", "55425-3", "68999-2", "11328-2", "69000-8", "69000-8", "60978-4", "60978-4", "8890-6", "8886-4", "68999-2", "68999-2")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/heartrate", "Heart rate", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "2708-6", "19224-5", "20564-1", "2709-4", "2710-2", "2711-0", "2713-6", "51733-4", "59408-5", "59417-6", "89276-0", "97549-0")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/oxygensat", "Oxygen saturation", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "8310-5", "60834-9", "60835-6", "60836-4", "60838-0", "60955-2", "61009-7", "75539-7", "75987-8", "76010-8", "76011-6", "76278-1", "8309-7", "8310-5", "8328-7", "8329-5", "8330-3", "8331-1", "8332-9", "8333-7", "8334-5", "91371-5", "98657-0", "98663-8")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bodytemp", "Body temperature", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "8302-2", "3137-7", "3138-5", "8302-2", "8306-3", "8308-9")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bodyheight", "Body height", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "9843-4", "8287-5", "9843-4", "8289-1")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/headcircum", "Head circumference", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "29463-7", "29463-7", "3141-9", "3142-7", "75292-3", "79348-9", "8350-1", "8351-9")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bodyweight", "Body weight", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "39156-5", "39156-5", "59574-4", "89270-3")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bmi", "Body mass index", "LOINC", codes, pct, mode) && ok;
|
||||
} else if (hasLoincCode(code, codes, "85354-9", "96607-7", "35094-2", "8459-0", "85354-9", "76534-7", "96607-7", "55284-4", "8480-6")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bp", "Blood pressure systolic and diastolic", "LOINC", codes, pct, mode) && ok;
|
||||
|
||||
} else if (hasSctCode(code, codes, "46680005")) {
|
||||
ok = checkObservationAgainstProfile(valContext, errors, element, stack, "http://hl7.org/fhir/StructureDefinition/vitalspanel", "Vital Signs Panel", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "86290005", "271625008", "271306003")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "Blood pressure systolic and diastolic", "Respiratory Rate", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "271306003", "249043002", "444981005", "399017001", "251670001", "429525003", "429614003")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/heartrate", "Heart rate", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "103228002", "103228002", "442349007", "442476006", "442440005", "431314004", "442734002", "713194001")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/oxygensat", "Oxygen saturation", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "386725007", "276885007", "300076005", "1222808002", "364246006", "307047009", "708499008", "708499008", "431598003", "698831002", "698832009", "415882003", "415974002", "415929009", "415945006")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bodytemp", "Body temperature", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "1153637007", "1162419008", "50373000", "1162418000", "1230278008", "1162392001", "1162417005")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bodyheight", "Body height", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "363812007", "169876006", "1269262007", "363811000")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/headcircum", "Head circumference", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "363811000", "60621009", "735395000", "425024002", "424927000", "784399000", "1162416001", "1162415002")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bodyweight", "Body weight", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "60621009")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bmi", "Body mass index", "SNOMED CT", codes, pct, mode) && ok;
|
||||
} else if (hasSctCode(code, codes, "75367002", "251076008", "6797001", "163033001", "123820005", "163035008", "723232008", "386534000", "386536003", "271649006", "271649006", "271650006", "407556006", "407554009", "716579001", "399304008")) {
|
||||
ok = checkObservationAgainstProfile(valContext,errors, element, stack, "http://hl7.org/fhir/StructureDefinition/bp", "Blood pressure systolic and diastolic", "SNOMED CT", codes, pct, mode) && ok;
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
private boolean checkObservationAgainstProfile(ValidationContext valContext, List<ValidationMessage> errors, Element element, NodeStack stack, String url, String name, String sys, List<String> loinc, PercentageTracker pct, ValidationMode mode) {
|
||||
element.addMessage(signpost(errors, NO_RULE_DATE, IssueType.INFORMATIONAL, element.line(), element.col(), stack.getLiteralPath(), I18nConstants.VALIDATION_VAL_PROFILE_SIGNPOST_OBS, url, name, sys, loinc.get(0)));
|
||||
StructureDefinition sd = context.fetchResource(StructureDefinition.class, url);
|
||||
if (sd == null) {
|
||||
return false;
|
||||
} else {
|
||||
return ((InstanceValidator) parent).startInner(valContext, errors, element, element, sd, stack, false, pct, mode);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasLoincCode(Element code, List<String> codes, String... values) {
|
||||
if (code != null) {
|
||||
List<Element> codings = code.getChildren("coding");
|
||||
for (Element coding : codings) {
|
||||
if ("http://loinc.org".equals(coding.getNamedChildValue("system")) && Utilities.existsInList(coding.getNamedChildValue("code"), values)) {
|
||||
codes.add(coding.getNamedChildValue("code"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean hasSctCode(Element code, List<String> codes, String... values) {
|
||||
if (code != null) {
|
||||
List<Element> codings = code.getChildren("coding");
|
||||
for (Element coding : codings) {
|
||||
if ("http://snomed.info/sct".equals(coding.getNamedChildValue("system")) && Utilities.existsInList(coding.getNamedChildValue("code"), values)) {
|
||||
codes.add(coding.getNamedChildValue("code"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -271,7 +271,7 @@ public class ValidationEngineTests {
|
|||
int h = hints(op);
|
||||
Assertions.assertEquals(0, e);
|
||||
Assertions.assertEquals(4, w);
|
||||
Assertions.assertEquals(0, h);
|
||||
Assertions.assertEquals(1, h);
|
||||
assertTrue(logger.verifyHasNoRequests(), "Unexpected request to TX server");
|
||||
if (!TestUtilities.silent)
|
||||
System.out.println(" .. done: " + Integer.toString(e) + " errors, " + Integer.toString(w) + " warnings, " + Integer.toString(h) + " information messages");
|
||||
|
|
|
@ -1465,6 +1465,71 @@ v: {
|
|||
"display" : "English (Region=United States)",
|
||||
"code" : "en-US",
|
||||
"system" : "urn:ietf:bcp:47",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20210731",
|
||||
"code" : "27113001",
|
||||
"display" : "Body weight (observable entity)"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The CodeSystem http://snomed.info/sct version http://snomed.info/sct/900000000000207008/version/20210731 is unknown. Valid versions: [http://snomed.info/sct/11000146104/version/20230331,http://snomed.info/sct/11000172109/version/20221115,http://snomed.info/sct/2011000195101/version/20230607,http://snomed.info/sct/20611000087101/version/20220930,http://snomed.info/sct/32506021000036107/version/20220731,http://snomed.info/sct/45991000052106/version/20210531,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20230301,http://snomed.info/sct/83821000000107/version/20230412,http://snomed.info/sct/900000000000207008/version/20230131,http://snomed.info/sct/900000000000207008/version/20230731] (from Tx-Server)",
|
||||
"class" : "CODESYSTEM_UNSUPPORTED",
|
||||
"unknown-systems" : "http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20210731",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "276885007"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Core body temperature",
|
||||
"code" : "276885007",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"code" : "Cel"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/ucum-bodytemp", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"true", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Cel",
|
||||
"code" : "Cel",
|
||||
"system" : "http://unitsofmeasure.org",
|
||||
"version" : "2.0.1",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
|
|
|
@ -5739,7 +5739,6 @@ v: {
|
|||
"severity" : "error",
|
||||
"error" : "Unknown Code 'X-34133-9' in the system 'http://loinc.org|2.74'; The provided code 'http://loinc.org#X-34133-9' is not in the value set 'http://hl7.org/fhir/ValueSet/@all' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -5760,6 +5759,397 @@ v: {
|
|||
"severity" : "error",
|
||||
"error" : "Unknown Code 'X-34133-9' in the system 'http://loinc.org|2.74'; The provided code 'http://loinc.org#X-34133-9' is not in the value set 'http://hl7.org/fhir/ValueSet/doc-typecodes--0|4.0.1' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "96607-7",
|
||||
"display" : "Blood pressure panel mean systolic and mean diastolic"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Blood pressure panel mean systolic and mean diastolic",
|
||||
"code" : "96607-7",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "96608-5",
|
||||
"display" : "Systolic blood pressure mean"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Systolic blood pressure mean",
|
||||
"code" : "96608-5",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "96609-3",
|
||||
"display" : "Diastolic blood pressure mean"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Diastolic blood pressure mean",
|
||||
"code" : "96609-3",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "96607-7"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The provided code 'http://loinc.org#96607-7' is not in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "96608-5"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The provided code 'http://loinc.org#96608-5' is not in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "96609-3"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The provided code 'http://loinc.org#96609-3' is not in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "59408-5"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The provided code 'http://loinc.org#59408-5' is not in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "59408-5",
|
||||
"display" : "O2 % BldC Oximetry"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Wrong Display Name 'O2 % BldC Oximetry' for http://loinc.org#59408-5 - should be one of 26 choices: 'Oxygen saturation in Arterial blood by Pulse oximetry', 'SaO2 % BldA PulseOx', 'O2 SaO2' (pl-PL), 'saturacja krwi tlenem' (pl-PL), 'MFr O2' (zh-CN), 'tO2' (zh-CN), '总氧' (zh-CN), '氧气 SaO2 动脉血 动脉血O2饱和度 可用数量表示的' (zh-CN), '定量性' (zh-CN), '数值型' (zh-CN), '数量型' (zh-CN), '连续数值型标尺 时刻' (zh-CN), '随机' (zh-CN), '随意' (zh-CN), '瞬间 肺部测量指标与呼吸机管理 脉搏血氧测定法' (zh-CN), '脉搏血氧定量' (zh-CN), '脉搏血氧测定' (zh-CN), '脉搏血氧仪 血氧测定法 饱和 饱和状态 饱和程度' (zh-CN), 'O2-Sättigung' (de-DE), 'Frazione di massa Gestione ventilazione polmonare Punto nel tempo (episodio) Sangue arterioso' (it-IT), 'Oksijen doymuşluğu' (tr-TR), 'Количественный Кровь артериальная Массовая доля Насыщение кислородом Оксигемометрия' (ru-RU), 'Гемоксиметрия Точка во времени' (ru-RU), 'Момент' (ru-RU), 'zuurstofsaturatiemeting' (nl-NL) or 'O2 SatO2' (fr-BE) (for the language(s) '--') (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "2708-6",
|
||||
"display" : "Oxygen saturation in Arterial blood"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "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.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "3150-0"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The provided code 'http://loinc.org#3150-0' is not in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "3151-8"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The provided code 'http://loinc.org#3151-8' is not in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "8867-4"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Heart rate",
|
||||
"code" : "8867-4",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "8867-4",
|
||||
"display" : "Heart rate"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Heart rate",
|
||||
"code" : "8867-4",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "8867-4"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Heart rate",
|
||||
"code" : "8867-4",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.71",
|
||||
"code" : "29463-7",
|
||||
"display" : "Body weight"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "29463-7",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.71",
|
||||
"code" : "29463-7"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "29463-7",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "8310-5"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body temperature",
|
||||
"code" : "8310-5",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "8310-5"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body temperature",
|
||||
"code" : "8310-5",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
|
|
|
@ -4228,7 +4228,6 @@ v: {
|
|||
"code" : "78615007",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome",
|
||||
"issue" : [{
|
||||
|
@ -4293,7 +4292,6 @@ v: {
|
|||
"code" : "246075003",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -4316,7 +4314,50 @@ v: {
|
|||
"code" : "363702006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "723961002",
|
||||
"display" : "Structure of left brachial artery (body structure)"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Structure of left brachial artery (body structure)",
|
||||
"code" : "723961002",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20210731",
|
||||
"code" : "27113001"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The CodeSystem http://snomed.info/sct version http://snomed.info/sct/900000000000207008/version/20210731 is unknown. Valid versions: [http://snomed.info/sct/11000146104/version/20230331,http://snomed.info/sct/11000172109/version/20221115,http://snomed.info/sct/2011000195101/version/20230607,http://snomed.info/sct/20611000087101/version/20220930,http://snomed.info/sct/32506021000036107/version/20220731,http://snomed.info/sct/45991000052106/version/20210531,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20230301,http://snomed.info/sct/83821000000107/version/20230412,http://snomed.info/sct/900000000000207008/version/20230131,http://snomed.info/sct/900000000000207008/version/20230731] (from Tx-Server)",
|
||||
"class" : "CODESYSTEM_UNSUPPORTED",
|
||||
"unknown-systems" : "http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20210731",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
|
|
@ -556,7 +556,6 @@ v: {
|
|||
"code" : "h",
|
||||
"system" : "http://unitsofmeasure.org",
|
||||
"version" : "2.0.1",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -578,7 +577,6 @@ v: {
|
|||
"code" : "ar",
|
||||
"system" : "http://unitsofmeasure.org",
|
||||
"version" : "2.0.1",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -600,6 +598,26 @@ v: {
|
|||
"code" : "l",
|
||||
"system" : "http://unitsofmeasure.org",
|
||||
"version" : "2.0.1",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://unitsofmeasure.org",
|
||||
"code" : "mm[Hg]{hg}"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/ucum-vitals-common--0", "version": "4.0.1", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The provided code 'http://unitsofmeasure.org#mm[Hg]{hg}' is not in the value set 'http://hl7.org/fhir/ValueSet/ucum-vitals-common--0|4.0.1' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
|
|
|
@ -73,7 +73,6 @@ v: {
|
|||
"display" : "text/plain",
|
||||
"code" : "text/plain",
|
||||
"system" : "urn:ietf:bcp:13",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -96,7 +95,6 @@ v: {
|
|||
"code" : "271649006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -116,7 +114,6 @@ v: {
|
|||
"display" : "json",
|
||||
"code" : "json",
|
||||
"system" : "urn:ietf:bcp:13",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -137,7 +134,6 @@ v: {
|
|||
"display" : "World",
|
||||
"code" : "001",
|
||||
"system" : "http://unstats.un.org/unsd/methods/m49/m49.htm",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -156,7 +152,6 @@ v: {
|
|||
v: {
|
||||
"code" : "nl-NL",
|
||||
"system" : "urn:ietf:bcp:47",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -175,7 +170,6 @@ v: {
|
|||
v: {
|
||||
"code" : "en-AU",
|
||||
"system" : "urn:ietf:bcp:47",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -195,7 +189,6 @@ v: {
|
|||
"display" : "English",
|
||||
"code" : "en",
|
||||
"system" : "urn:ietf:bcp:47",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -217,6 +210,49 @@ v: {
|
|||
"display" : "World",
|
||||
"code" : "001",
|
||||
"system" : "http://unstats.un.org/unsd/methods/m49/m49.htm",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "27113001",
|
||||
"display" : "Body weight"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "5.0.0", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "27113001",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"code" : "[lb_av]"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/ucum-bodyweight", "version": "5.0.0", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"true", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "[lb_av]",
|
||||
"code" : "[lb_av]",
|
||||
"system" : "http://unitsofmeasure.org",
|
||||
"version" : "2.0.1",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
|
|
|
@ -814,6 +814,70 @@ v: {
|
|||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "29463-7",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "29463-7"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "5.0.0", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "29463-7",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "29463-7",
|
||||
"display" : "Body Weight"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "5.0.0", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"false", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "29463-7",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "29463-7"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "5.0.0", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "29463-7",
|
||||
|
@ -826,3 +890,114 @@ v: {
|
|||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "3141-9"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0", "version": "5.0.0", "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"CHECK_MEMERSHIP_ONLY", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The provided code 'http://loinc.org#3141-9' is not in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|5.0.0' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "29463-7",
|
||||
"display" : "Body Weight"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "5.0.0", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "29463-7",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "3141-9",
|
||||
"display" : "Body weight Measured"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/observation-vitalsignresult", "version": "5.0.0", "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight Measured",
|
||||
"code" : "3141-9",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "29463-7"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "29463-7",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "3141-9"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight Measured",
|
||||
"code" : "3141-9",
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.74",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
|
|
|
@ -428,7 +428,6 @@ v: {
|
|||
"code" : "368209003",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -451,7 +450,6 @@ v: {
|
|||
"code" : "271649006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -473,7 +471,6 @@ v: {
|
|||
"code" : "271649006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -520,7 +517,6 @@ v: {
|
|||
"code" : "132037003",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/731000124108/version/20230301",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome",
|
||||
"issue" : [{
|
||||
|
@ -550,7 +546,6 @@ v: {
|
|||
"severity" : "error",
|
||||
"error" : "Wrong Display Name 'Pineywoods pig breed. Not.' for http://snomed.info/sct#132037003 - should be one of 3 choices: 'Pineywoods pig', 'Pineywoods pig breed (organism)' or 'Pineywoods pig breed' (for the language(s) '--') (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome",
|
||||
"issue" : [{
|
||||
|
@ -580,7 +575,6 @@ v: {
|
|||
"code" : "109006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -602,7 +596,6 @@ v: {
|
|||
"code" : "109006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -625,7 +618,6 @@ v: {
|
|||
"code" : "109006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -647,7 +639,6 @@ v: {
|
|||
"code" : "109006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -670,7 +661,6 @@ v: {
|
|||
"code" : "106004",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -691,7 +681,6 @@ v: {
|
|||
"severity" : "error",
|
||||
"error" : "The provided code 'http://snomed.info/sct#106004' is not in the value set 'http://hl7.org/fhir/ValueSet/clinical-findings--0|5.0.0' (from Tx-Server)",
|
||||
"class" : "UNKNOWN",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -714,7 +703,6 @@ v: {
|
|||
"code" : "106004",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -743,7 +731,6 @@ v: {
|
|||
"code" : "106004",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -766,7 +753,6 @@ v: {
|
|||
"code" : "85600001",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -789,7 +775,6 @@ v: {
|
|||
"code" : "58108001",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome",
|
||||
"issue" : [{
|
||||
|
@ -840,7 +825,6 @@ v: {
|
|||
"code" : "122555007",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -863,7 +847,6 @@ v: {
|
|||
"code" : "263678003",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -886,7 +869,6 @@ v: {
|
|||
"code" : "119364003",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -909,7 +891,6 @@ v: {
|
|||
"code" : "61088005",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -932,7 +913,6 @@ v: {
|
|||
"code" : "702281005",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -955,7 +935,6 @@ v: {
|
|||
"code" : "119361006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -978,7 +957,6 @@ v: {
|
|||
"code" : "32039001",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -999,7 +977,6 @@ v: {
|
|||
"code" : "230993007",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -1020,7 +997,6 @@ v: {
|
|||
"code" : "385633008",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
@ -1041,6 +1017,27 @@ v: {
|
|||
"code" : "260388006",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
}
|
||||
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "27113001"
|
||||
}, "valueSet" :null, "langs":"", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "displayWarningMode":"false", "versionFlexible":"true", "profile": {
|
||||
"resourceType" : "Parameters",
|
||||
"parameter" : [{
|
||||
"name" : "profile-url",
|
||||
"valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891"
|
||||
}]
|
||||
}}####
|
||||
v: {
|
||||
"display" : "Body weight",
|
||||
"code" : "27113001",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20230731",
|
||||
"unknown-systems" : "",
|
||||
"issues" : {
|
||||
"resourceType" : "OperationOutcome"
|
||||
|
|
2
pom.xml
2
pom.xml
|
@ -20,7 +20,7 @@
|
|||
<properties>
|
||||
<guava_version>32.0.1-jre</guava_version>
|
||||
<hapi_fhir_version>6.4.1</hapi_fhir_version>
|
||||
<validator_test_case_version>1.4.14</validator_test_case_version>
|
||||
<validator_test_case_version>1.4.15-SNAPSHOT</validator_test_case_version>
|
||||
<jackson_version>2.15.2</jackson_version>
|
||||
<junit_jupiter_version>5.9.2</junit_jupiter_version>
|
||||
<junit_platform_launcher_version>1.8.2</junit_platform_launcher_version>
|
||||
|
|
Loading…
Reference in New Issue