From e8f4bde1eb1f98e7042b2862666edb20382df069 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 30 Jan 2024 19:03:54 +1100 Subject: [PATCH 1/5] Fix formatting of error messages from terminology server --- .../java/org/hl7/fhir/dstu3/utils/ResourceUtilities.java | 8 ++++---- .../java/org/hl7/fhir/r4/utils/ResourceUtilities.java | 8 ++++---- .../java/org/hl7/fhir/r4b/utils/ResourceUtilities.java | 8 ++++---- .../java/org/hl7/fhir/r5/utils/ResourceUtilities.java | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/utils/ResourceUtilities.java b/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/utils/ResourceUtilities.java index 0694f0a56..7343423c1 100644 --- a/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/utils/ResourceUtilities.java +++ b/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/utils/ResourceUtilities.java @@ -85,13 +85,13 @@ public class ResourceUtilities { StringBuilder b = new StringBuilder(); for (OperationOutcomeIssueComponent t : error.getIssue()) if (t.getSeverity() == IssueSeverity.ERROR) - b.append("Error:" +gen(t.getDetails())+"\r\n"); + b.append("Error: " +gen(t.getDetails())+"\r\n"); else if (t.getSeverity() == IssueSeverity.FATAL) - b.append("Fatal:" +gen(t.getDetails())+"\r\n"); + b.append("Fatal: " +gen(t.getDetails())+"\r\n"); else if (t.getSeverity() == IssueSeverity.WARNING) - b.append("Warning:" +gen(t.getDetails())+"\r\n"); + b.append("Warning: " +gen(t.getDetails())+"\r\n"); else if (t.getSeverity() == IssueSeverity.INFORMATION) - b.append("Information:" +gen(t.getDetails())+"\r\n"); + b.append("Information: " +gen(t.getDetails())+"\r\n"); return b.toString(); } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/ResourceUtilities.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/ResourceUtilities.java index 6a49ad860..38ab37fc8 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/ResourceUtilities.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/ResourceUtilities.java @@ -81,13 +81,13 @@ public class ResourceUtilities { if (first) first = false; else b.append("\r\n"); String txt = t.hasDiagnostics() ? t.getDiagnostics() : gen(t.getDetails()); if (t.getSeverity() == IssueSeverity.ERROR) - b.append("Error:" + txt); + b.append("Error: " + txt); else if (t.getSeverity() == IssueSeverity.FATAL) - b.append("Fatal:" + txt); + b.append("Fatal: " + txt); else if (t.getSeverity() == IssueSeverity.WARNING) - b.append("Warning:" + txt); + b.append("Warning: " + txt); else if (t.getSeverity() == IssueSeverity.INFORMATION) - b.append("Information:" + txt); + b.append("Information: " + txt); } return b.toString(); } diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/ResourceUtilities.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/ResourceUtilities.java index eb2569b98..373f7af1e 100644 --- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/ResourceUtilities.java +++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/ResourceUtilities.java @@ -79,13 +79,13 @@ public class ResourceUtilities { StringBuilder b = new StringBuilder(); for (OperationOutcomeIssueComponent t : error.getIssue()) { if (t.getSeverity() == IssueSeverity.ERROR) { - b.append("Error:" + gen(t.getDetails()) + "\r\n"); + b.append("Error: " + gen(t.getDetails()) + "\r\n"); } else if (t.getSeverity() == IssueSeverity.FATAL) { - b.append("Fatal:" + gen(t.getDetails()) + "\r\n"); + b.append("Fatal: " + gen(t.getDetails()) + "\r\n"); } else if (t.getSeverity() == IssueSeverity.WARNING) { - b.append("Warning:" + gen(t.getDetails()) + "\r\n"); + b.append("Warning: " + gen(t.getDetails()) + "\r\n"); } else if (t.getSeverity() == IssueSeverity.INFORMATION) { - b.append("Information:" + gen(t.getDetails()) + "\r\n"); + b.append("Information: " + gen(t.getDetails()) + "\r\n"); } } return b.toString(); diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/ResourceUtilities.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/ResourceUtilities.java index 030ee34a9..ddfe1d674 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/ResourceUtilities.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/ResourceUtilities.java @@ -79,13 +79,13 @@ public class ResourceUtilities { StringBuilder b = new StringBuilder(); for (OperationOutcomeIssueComponent t : error.getIssue()) { if (t.getSeverity() == IssueSeverity.ERROR) { - b.append("Error:" +gen(t.getDetails())+"\r\n"); + b.append("Error: " +gen(t.getDetails())+"\r\n"); } else if (t.getSeverity() == IssueSeverity.FATAL) { - b.append("Fatal:" +gen(t.getDetails())+"\r\n"); + b.append("Fatal: " +gen(t.getDetails())+"\r\n"); } else if (t.getSeverity() == IssueSeverity.WARNING) { - b.append("Warning:" +gen(t.getDetails())+"\r\n"); + b.append("Warning: " +gen(t.getDetails())+"\r\n"); } else if (t.getSeverity() == IssueSeverity.INFORMATION) { - b.append("Information:" +gen(t.getDetails())+"\r\n"); + b.append("Information: " +gen(t.getDetails())+"\r\n"); } } return b.toString(); From d01cc9d1d956a45b336639316e2b720acfd44a8c Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 30 Jan 2024 19:04:34 +1100 Subject: [PATCH 2/5] Improvements to Identifier rendering --- .../hl7/fhir/r5/renderers/DataRenderer.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java index 79aaf7c90..1f99828ae 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/DataRenderer.java @@ -1212,8 +1212,8 @@ public class DataRenderer extends Renderer implements CodeResolver { s = ii.getType().getCoding().get(0).getDisplay()+": "+s; else if (ii.getType().hasCoding() && ii.getType().getCoding().get(0).hasCode()) s = lookupCode(ii.getType().getCoding().get(0).getSystem(), ii.getType().getCoding().get(0).getVersion(), ii.getType().getCoding().get(0).getCode())+": "+s; - } else { - s = "id:\u00A0"+s; + } else if (ii.hasSystem()) { + s = ii.getSystem()+"#"+s; } if (ii.hasUse() || ii.hasPeriod()) { @@ -1234,24 +1234,32 @@ public class DataRenderer extends Renderer implements CodeResolver { protected void renderIdentifier(XhtmlNode x, Identifier ii) { if (ii.hasType()) { - if (ii.getType().hasText()) - x.tx(ii.getType().getText()+":"); - else if (ii.getType().hasCoding() && ii.getType().getCoding().get(0).hasDisplay()) - x.tx(ii.getType().getCoding().get(0).getDisplay()+":"); - else if (ii.getType().hasCoding() && ii.getType().getCoding().get(0).hasCode()) - x.tx(lookupCode(ii.getType().getCoding().get(0).getSystem(), ii.getType().getCoding().get(0).getVersion(), ii.getType().getCoding().get(0).getCode())+":"); - } else { - x.tx("id:"); - } - x.nbsp(); - - NamingSystem ns = context.getContext().getNSUrlMap().get(ii.getSystem()); - if (ns != null) { - if (ns.hasWebPath()) { - x.ah(ns.getWebPath()).tx("#"); - } else { - x.tx(ns.present()+"#"); + if (ii.getType().hasText()) { + x.tx(ii.getType().getText()); + } else if (ii.getType().hasCoding() && ii.getType().getCoding().get(0).hasDisplay()) { + x.tx(ii.getType().getCoding().get(0).getDisplay()); + } else if (ii.getType().hasCoding() && ii.getType().getCoding().get(0).hasCode()) { + x.tx(lookupCode(ii.getType().getCoding().get(0).getSystem(), ii.getType().getCoding().get(0).getVersion(), ii.getType().getCoding().get(0).getCode())); } + x.tx("/"); + } else if (ii.hasSystem()) { + NamingSystem ns = context.getContext().getNSUrlMap().get(ii.getSystem()); + if (ns != null) { + if (ns.hasWebPath()) { + x.ah(ns.getWebPath(), ns.getDescription()).tx(ns.present()); + } else { + x.tx(ns.present()); + } + } else { + switch (ii.getSystem()) { + case "urn:oid:2.51.1.3": + x.ah("https://www.gs1.org/standards/id-keys/gln", "Global Location Number").tx("GLN"); + break; + default: + x.code(ii.getSystem()); + } + } + x.tx("/"); } x.tx(Utilities.noString(ii.getValue()) ? "?ngen-9?" : ii.getValue()); From 975f4fd28b712898f29da360e7ea1fd4997d3c7f Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 30 Jan 2024 19:05:20 +1100 Subject: [PATCH 3/5] rework server decision making when multiple code systems being used --- .../fhir/r5/context/BaseWorkerContext.java | 16 +- .../client/TerminologyClientContext.java | 13 + .../client/TerminologyClientManager.java | 190 +++++++++--- .../fhir/utilities/json/model/JsonObject.java | 10 + .../org.hl7.fhir.validation/4.0.1/loinc.cache | 288 +++--------------- 5 files changed, 225 insertions(+), 292 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java index 575e346c4..e10e75c0e 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java @@ -849,7 +849,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte return res; } Set systems = findRelevantSystems(vs); - TerminologyClientContext tc = terminologyClientManager.chooseServer(systems, true); + TerminologyClientContext tc = terminologyClientManager.chooseServer(vs, systems, true); if (tc == null) { return new ValueSetExpansionOutcome("No server available", TerminologyServiceErrorClass.INTERNAL_ERROR, true); } @@ -977,7 +977,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte p.addParameter().setName("cache-id").setValue(new IdType(terminologyClientManager.getCacheId())); Set systems = findRelevantSystems(vs); - TerminologyClientContext tc = terminologyClientManager.chooseServer(systems, true); + TerminologyClientContext tc = terminologyClientManager.chooseServer(vs, systems, true); addDependentResources(tc, p, vs); @@ -1107,7 +1107,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte } if (batch.getEntry().size() > 0) { - TerminologyClientContext tc = terminologyClientManager.chooseServer(systems, false); + TerminologyClientContext tc = terminologyClientManager.chooseServer(vs, systems, false); Bundle resp = processBatch(tc, batch, systems); for (int i = 0; i < batch.getEntry().size(); i++) { CodingValidationRequest t = (CodingValidationRequest) batch.getEntry().get(i).getUserData("source"); @@ -1212,7 +1212,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte systems.add(codingValidationRequest.getCoding().getSystem()); } } - TerminologyClientContext tc = terminologyClientManager.chooseServer(systems, false); + TerminologyClientContext tc = terminologyClientManager.chooseServer(vs, systems, false); if (batch.getEntry().size() > 0) { Bundle resp = processBatch(tc, batch, systems); @@ -1345,7 +1345,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte } Set systems = findRelevantSystems(code, vs); - TerminologyClientContext tc = terminologyClientManager.chooseServer(systems, false); + TerminologyClientContext tc = terminologyClientManager.chooseServer(vs, systems, false); String csumm =cachingAllowed && txCache != null ? txCache.summary(code) : null; if (cachingAllowed && txCache != null) { @@ -1364,7 +1364,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte } if (!res.isOk() && localError != null) { res.setDiagnostics("Local Error: "+localError.trim()+". Server Error: "+res.getMessage()); - } else if (!res.isOk() && res.getUnknownSystems() != null && res.getUnknownSystems().contains(codeKey) && localWarning != null) { + } else if (!res.isOk() && res.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED && res.getUnknownSystems() != null && res.getUnknownSystems().contains(codeKey) && localWarning != null) { // we had some problem evaluating locally, but the server doesn't know the code system, so we'll just go with the local error res = new ValidationResult(IssueSeverity.WARNING, localWarning, null); res.setDiagnostics("Local Warning: "+localWarning.trim()+". Server Error: "+res.getMessage()); @@ -1537,7 +1537,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte return new ValidationResult(IssueSeverity.ERROR, "Error validating code: running without terminology services", TerminologyServiceErrorClass.NOSERVICE, null); } Set systems = findRelevantSystems(code, vs); - TerminologyClientContext tc = terminologyClientManager.chooseServer(systems, false); + TerminologyClientContext tc = terminologyClientManager.chooseServer(vs, systems, false); txLog("$validate "+txCache.summary(code)+" for "+ txCache.summary(vs)+" on "+tc.getAddress()); try { @@ -1779,6 +1779,8 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte } else if (p.getName().equals("x-caused-by-unknown-system")) { err = TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED; unknownSystems.add(((PrimitiveType) p.getValue()).asStringValue()); + } else if (p.getName().equals("x-unknown-system")) { + unknownSystems.add(((PrimitiveType) p.getValue()).asStringValue()); } else if (p.getName().equals("warning-withdrawn")) { String msg = ((PrimitiveType) p.getValue()).asStringValue(); OperationOutcomeIssueComponent iss = new OperationOutcomeIssueComponent(org.hl7.fhir.r5.model.OperationOutcome.IssueSeverity.INFORMATION, org.hl7.fhir.r5.model.OperationOutcome.IssueType.BUSINESSRULE); diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientContext.java index 59a2ea137..5bc24d3ea 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientContext.java @@ -75,6 +75,12 @@ public class TerminologyClientContext { return client; } + public void seeUse(Set systems, TerminologyClientContextUseType useType) { + for (String s : systems) { + seeUse(s, useType); + } + } + public void seeUse(String s, TerminologyClientContextUseType useType) { TerminologyClientContextUseCount uc = useCounts.get(s); if (uc == null) { @@ -185,4 +191,11 @@ public class TerminologyClientContext { } return false; } + + @Override + public String toString() { + return client.getAddress(); + } + + } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientManager.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientManager.java index fca5bfcaa..11ddb575b 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientManager.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/client/TerminologyClientManager.java @@ -24,15 +24,53 @@ import org.hl7.fhir.r5.model.TerminologyCapabilities; import org.hl7.fhir.r5.model.ValueSet; import org.hl7.fhir.r5.terminologies.ValueSetUtilities; import org.hl7.fhir.r5.terminologies.client.TerminologyClientContext.TerminologyClientContextUseType; +import org.hl7.fhir.r5.terminologies.client.TerminologyClientManager.ServerOptionList; import org.hl7.fhir.r5.terminologies.utilities.TerminologyCache; import org.hl7.fhir.r5.terminologies.utilities.TerminologyCache.SourcedValueSet; import org.hl7.fhir.r5.utils.ToolingExtensions; +import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; import org.hl7.fhir.utilities.ToolingClientLogger; import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.json.model.JsonObject; import org.hl7.fhir.utilities.json.parser.JsonParser; public class TerminologyClientManager { + public class ServerOptionList { + private List authoritative = new ArrayList(); + private List candidates = new ArrayList(); + + public ServerOptionList(String address) { + candidates.add(address); + } + + public ServerOptionList() { + } + + public ServerOptionList(List auth, List cand) { + authoritative.addAll(auth); + candidates.addAll(cand); + } + + public void replace(String src, String dst) { + for (int i = 0; i < candidates.size(); i++) { + if (candidates.get(i).contains("://"+src)) { + candidates.set(i, candidates.get(i).replace("://"+src, "://"+dst)); + } + } + for (int i = 0; i < authoritative.size(); i++) { + if (authoritative.get(i).contains("://"+src)) { + authoritative.set(i, authoritative.get(i).replace("://"+src, "://"+dst)); + } + } + } + + @Override + public String toString() { + return "auth = " + CommaSeparatedStringBuilder.join("|", authoritative)+ ", candidates=" + CommaSeparatedStringBuilder.join("|", candidates); + } + + } + public ITerminologyClientFactory getFactory() { return factory; } @@ -50,8 +88,8 @@ public class TerminologyClientManager { private String cacheId; private List serverList = new ArrayList<>(); // clients by server address private Map serverMap = new HashMap<>(); // clients by server address - private Map resMap = new HashMap<>(); // client resolution list - private List internalErrors = new ArrayList<>(); + private Map resMap = new HashMap<>(); // client resolution list + private List internalLog = new ArrayList<>(); protected Parameters expParameters; private TerminologyCache cache; @@ -82,40 +120,92 @@ public class TerminologyClientManager { } - public TerminologyClientContext chooseServer(Set systems, boolean expand) throws TerminologyServiceException { + public TerminologyClientContext chooseServer(ValueSet vs, Set systems, boolean expand) throws TerminologyServiceException { if (serverList.isEmpty()) { return null; } - if (systems.contains(UNRESOLVED_VALUESET)) { + if (systems.contains(UNRESOLVED_VALUESET) || systems.isEmpty()) { return serverList.get(0); } - Set clients = new HashSet<>(); + List choices = new ArrayList<>(); for (String s : systems) { - clients.add(findServerForSystem(s, expand)); + choices.add(findServerForSystem(s, expand)); + } + + // first we look for a server that's authoritative for all of them + for (ServerOptionList ol : choices) { + for (String s : ol.authoritative) { + boolean ok = true; + for (ServerOptionList t : choices) { + if (!t.authoritative.contains(s)) { + ok = false; + } + } + if (ok) { + return findClient(s, systems, expand); + } + } } - if (clients.size() == 1) { - return clients.iterator().next(); + + // now we look for a server that's authoritative for one of them and a candidate for the others + for (ServerOptionList ol : choices) { + for (String s : ol.authoritative) { + boolean ok = true; + for (ServerOptionList t : choices) { + if (!t.candidates.contains(s)) { + ok = false; + } + } + if (ok) { + return findClient(s, systems, expand); + } + } + } + + // now we look for a server that's a candidate for all of them + for (ServerOptionList ol : choices) { + for (String s : ol.candidates) { + boolean ok = true; + for (ServerOptionList t : choices) { + if (!t.candidates.contains(s)) { + ok = false; + } + } + if (ok) { + return findClient(s, systems, expand); + } + } + } + + // no agreement? Then what we do depends + if (vs != null) { + if (vs.hasUserData("External.Link")) { + if (systems.size() == 1) { + internalLog.add(vs.getVersionedUrl()+" uses the system "+systems.toString()+" not handled by any servers. Using source @ '"+vs.getUserString("External.Link")+"'"); + } else { + internalLog.add(vs.getVersionedUrl()+" includes multiple systems "+systems.toString()+" best handled by multiple servers: "+choices.toString()+". Using source @ '"+vs.getUserString("External.Link")+"'"); + } + return findClient(vs.getUserString("External.Link"), systems, expand); + } else { + if (systems.size() == 1) { + internalLog.add(vs.getVersionedUrl()+" uses the system "+systems.toString()+" not handled by any servers. Using master @ '"+serverList.get(0)+"'"); + } else { + internalLog.add(vs.getVersionedUrl()+" includes multiple systems "+systems.toString()+" best handled by multiple servers: "+choices.toString()+". Using master @ '"+serverList.get(0)+"'"); + } + return findClient(serverList.get(0).getAddress(), systems, expand); + } } else { - System.out.println("systems: "+systems.toString()); - return serverList.get(0); + if (systems.size() == 1) { + internalLog.add("Request for system "+systems.toString()+" not handled by any servers. Using master @ '"+serverList.get(0)+"'"); + } else { + internalLog.add("Request for multiple systems "+systems.toString()+" best handled by multiple servers: "+choices.toString()+". Using master @ '"+serverList.get(0)+"'"); + } + return findClient(serverList.get(0).getAddress(), systems, expand); } } - private TerminologyClientContext findServerForSystem(String s, boolean expand) throws TerminologyServiceException { - String server = resMap.get(s); - if (server == null) { - server = decideWhichServer(s); - // testing support - if (server != null && server.contains("://tx.fhir.org")) { - try { - server = server.replace("tx.fhir.org", new URL(getMasterClient().getAddress()).getHost()); - } catch (MalformedURLException e) { - } - } - resMap.put(s, server); - save(); - } + private TerminologyClientContext findClient(String server, Set systems, boolean expand) { TerminologyClientContext client = serverMap.get(server); if (client == null) { try { @@ -127,13 +217,28 @@ public class TerminologyClientManager { serverList.add(client); serverMap.put(server, client); } - client.seeUse(s, expand ? TerminologyClientContextUseType.expand : TerminologyClientContextUseType.validate); + client.seeUse(systems, expand ? TerminologyClientContextUseType.expand : TerminologyClientContextUseType.validate); return client; } - private String decideWhichServer(String url) { + private ServerOptionList findServerForSystem(String s, boolean expand) throws TerminologyServiceException { + ServerOptionList serverList = resMap.get(s); + if (serverList == null) { + serverList = decideWhichServer(s); + // testing support + try { + serverList.replace("tx.fhir.org", new URL(getMasterClient().getAddress()).getHost()); + } catch (MalformedURLException e) { + } + resMap.put(s, serverList); + save(); + } + return serverList; + } + + private ServerOptionList decideWhichServer(String url) { if (IGNORE_TX_REGISTRY) { - return getMasterClient().getAddress(); + return new ServerOptionList(getMasterClient().getAddress()); } if (expParameters != null) { if (!url.contains("|")) { @@ -157,23 +262,25 @@ public class TerminologyClientManager { request = request + "&usage="+usage; } try { + ServerOptionList ret = new ServerOptionList(); JsonObject json = JsonParser.parseObjectFromUrl(request); for (JsonObject item : json.getJsonObjects("authoritative")) { - return item.asString("url"); + ret.authoritative.add(item.asString("url")); } for (JsonObject item : json.getJsonObjects("candidates")) { - return item.asString("url"); + ret.candidates.add(item.asString("url")); } + return ret; } catch (Exception e) { String msg = "Error resolving system "+url+": "+e.getMessage()+" ("+request+")"; - if (!internalErrors.contains(msg)) { - internalErrors.add(msg); + if (!internalLog.contains(msg)) { + internalLog.add(msg); } if (!monitorServiceURL.contains("tx.fhir.org")) { e.printStackTrace(); } } - return getMasterClient().getAddress(); + return new ServerOptionList( getMasterClient().getAddress()); } @@ -248,7 +355,11 @@ public class TerminologyClientManager { if (cacheFile.exists()) { JsonObject json = JsonParser.parseObject(cacheFile); for (JsonObject pair : json.getJsonObjects("systems")) { - resMap.put(pair.asString("system"), pair.asString("server")); + if (pair.has("server")) { + resMap.put(pair.asString("system"), new ServerOptionList(pair.asString("server"))); + } else { + resMap.put(pair.asString("system"), new ServerOptionList(pair.getStrings("authoritative"), pair.getStrings("candidates"))); + } } } } catch (Exception e) { @@ -264,7 +375,8 @@ public class TerminologyClientManager { JsonObject si = new JsonObject(); json.forceArray("systems").add(si); si.add("system", s); - si.add("server", resMap.get(s)); + si.add("authoritative", resMap.get(s).authoritative); + si.add("candidates", resMap.get(s).candidates); } try { JsonParser.compose(json, cacheFile, true); @@ -273,8 +385,8 @@ public class TerminologyClientManager { } } - public List getInternalErrors() { - return internalErrors; + public List getInternalLog() { + return internalLog; } public List getServerList() { @@ -377,8 +489,8 @@ public class TerminologyClientManager { } catch (Exception e) { e.printStackTrace(); String msg = "Error resolving valueSet "+canonical+": "+e.getMessage()+" ("+request+")"; - if (!internalErrors.contains(msg)) { - internalErrors.add(msg); + if (!internalLog.contains(msg)) { + internalLog.add(msg); } e.printStackTrace(); return null; @@ -393,5 +505,5 @@ public class TerminologyClientManager { } return false; } - + } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonObject.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonObject.java index ecf9593f5..c64b6d0e2 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonObject.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonObject.java @@ -68,6 +68,16 @@ public class JsonObject extends JsonElement { return add(name, value == null ? new JsonNull() : new JsonString(value)); } + public JsonObject add(String name, List values) throws JsonException { + check(name != null, "Name is null"); + JsonArray arr = new JsonArray(); + add(name, arr); + for (String v : values) { + arr.add(v); + } + return this; + } + public JsonObject addIfNotNull(String name, String value) throws JsonException { check(name != null, "Name is null"); if (value == null) { diff --git a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/loinc.cache b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/loinc.cache index 078f9d78d..73f590b0b 100644 --- a/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/loinc.cache +++ b/org.hl7.fhir.validation/src/test/resources/txCache/org.hl7.fhir.validation/4.0.1/loinc.cache @@ -17,7 +17,6 @@ v: { "error" : "Wrong Display Name 'O2 % BldC Oximetry' for http://loinc.org#59408-5. Valid display is 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) '--')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -58,7 +57,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -82,7 +80,6 @@ v: { "error" : "The provided code 'http://loinc.org#59408-5' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -122,7 +119,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -146,7 +142,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -170,7 +165,6 @@ v: { "error" : "The provided code 'http://loinc.org#3150-0' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -212,7 +206,6 @@ v: { "error" : "Wrong Display Name 'Flow Rate' for http://loinc.org#3151-8. Valid display is one of 37 choices: 'Inhaled oxygen flow rate', 'Inhaled O2 flow rate', 'O2' (zh-CN), 'tO2' (zh-CN), '总氧' (zh-CN), '氧气 体积速率(单位时间)' (zh-CN), '单位时间内体积的变化速率' (zh-CN), '流量 可用数量表示的' (zh-CN), '定量性' (zh-CN), '数值型' (zh-CN), '数量型' (zh-CN), '连续数值型标尺 吸入气' (zh-CN), '吸入气体' (zh-CN), '吸入的空气 所吸入的氧' (zh-CN), '已吸入的氧气 时刻' (zh-CN), '随机' (zh-CN), '随意' (zh-CN), '瞬间 气 气体类 空气' (zh-CN), 'Inhaled O2' (pt-BR), 'vRate' (pt-BR), 'Volume rate' (pt-BR), 'Flow' (pt-BR), 'Point in time' (pt-BR), 'Random' (pt-BR), 'IhG' (pt-BR), 'Inhaled Gas' (pt-BR), 'Inspired' (pt-BR), 'Quantitative' (pt-BR), 'QNT' (pt-BR), 'Quant' (pt-BR), 'Quan' (pt-BR), 'Gases' (pt-BR), 'Clinico Gas inalati Punto nel tempo (episodio) Tasso di Volume' (it-IT), 'Количественный Объемная скорость Точка во времени' (ru-RU), 'Момент' (ru-RU), 'ingeademde O2' (nl-NL) or 'O2-Zufuhr' (de-AT) (for the language(s) '--')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -253,7 +246,6 @@ v: { "error" : "The provided code 'http://loinc.org#3151-8' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -293,7 +285,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -317,7 +308,6 @@ v: { "error" : "The provided code 'http://loinc.org#2708-6' was not found in the value set 'http://hl7.org/fhir/us/core/ValueSet/us-core-vital-signs--0|4.0.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -357,7 +347,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -381,7 +370,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -404,7 +392,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -450,7 +437,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -473,7 +459,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -496,7 +481,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -519,7 +503,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -543,7 +526,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -566,7 +548,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -590,7 +571,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -614,7 +594,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -638,7 +617,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -662,7 +640,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -686,7 +663,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -710,7 +686,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -734,7 +709,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -758,7 +732,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -782,7 +755,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -806,7 +778,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -830,7 +801,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -854,7 +824,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -878,7 +847,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -902,7 +870,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -926,7 +893,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -949,7 +915,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -973,7 +938,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -997,7 +961,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1020,7 +983,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1044,7 +1006,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1068,7 +1029,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1091,7 +1051,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1115,7 +1074,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1139,7 +1097,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1162,7 +1119,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1186,7 +1142,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1210,7 +1165,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1233,7 +1187,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1257,7 +1210,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1281,7 +1233,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1304,7 +1255,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1328,7 +1278,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1352,7 +1301,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1376,7 +1324,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1401,7 +1348,6 @@ v: { "error" : "Wrong Display Name 'Patient Authorization Signature' for http://loinc.org#59284-0. Valid display is one of 29 choices: 'Consent Document', 'Consent', '临床文档型' (zh-CN), '临床文档' (zh-CN), '文档' (zh-CN), '文书' (zh-CN), '医疗文书' (zh-CN), '临床医疗文书 事件发生的地方' (zh-CN), '场景' (zh-CN), '环境' (zh-CN), '背景 医疗服务对象' (zh-CN), '客户' (zh-CN), '病人' (zh-CN), '超系统 - 病人 发现是一个原子型临床观察指标,并不是作为印象的概括陈述。体格检查、病史、系统检查及其他此类观察指标的属性均为发现。它们的标尺对于编码型发现可能是名义型,而对于叙述型文本之中所报告的发现,则可能是叙述型。' (zh-CN), '发现物' (zh-CN), '所见' (zh-CN), '结果' (zh-CN), '结论 同意书' (zh-CN), '知情同意' (zh-CN), '知情同意书 文档本体' (zh-CN), '临床文档本体' (zh-CN), '文档本体' (zh-CN), '文书本体' (zh-CN), '医疗文书本体' (zh-CN), '临床医疗文书本体 时刻' (zh-CN), '随机' (zh-CN), '随意' (zh-CN), '瞬间' (zh-CN) or 'Documentazione dell'ontologia Osservazione Punto nel tempo (episodio)' (it-IT) (for the language(s) '--')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -1441,7 +1387,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1465,7 +1410,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1488,7 +1432,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1512,7 +1455,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1536,7 +1478,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1560,7 +1501,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1584,7 +1524,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1608,7 +1547,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1632,7 +1570,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1656,7 +1593,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1680,7 +1616,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1704,7 +1639,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1728,7 +1662,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1752,7 +1685,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1776,7 +1708,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1799,7 +1730,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1823,7 +1753,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1847,7 +1776,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1870,7 +1798,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1894,7 +1821,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1918,7 +1844,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1941,7 +1866,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1965,7 +1889,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -1989,7 +1912,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2012,7 +1934,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2036,7 +1957,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2060,7 +1980,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2083,7 +2002,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2107,7 +2025,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2131,7 +2048,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2154,7 +2070,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2178,7 +2093,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2202,7 +2116,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2225,7 +2138,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2249,7 +2161,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2273,7 +2184,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2296,7 +2206,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2320,7 +2229,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2344,7 +2252,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2367,7 +2274,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2391,7 +2297,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2415,7 +2320,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2438,7 +2342,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2462,7 +2365,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2486,7 +2388,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2510,7 +2411,6 @@ v: { "error" : "The provided code 'http://loinc.org#883-9' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2551,7 +2451,6 @@ v: { "error" : "The provided code 'http://loinc.org#46418-0' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2592,7 +2491,6 @@ v: { "error" : "The provided code 'http://loinc.org#77140-2' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2633,7 +2531,6 @@ v: { "error" : "The provided code 'http://loinc.org#4535-1' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2674,7 +2571,6 @@ v: { "error" : "The provided code 'http://loinc.org#29463-7' was not found in the value set 'https://mednet.swiss/fhir/ValueSet/mni-obs-laboratory--0|0.5.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2715,7 +2611,6 @@ v: { "error" : "The provided code 'http://loinc.org#8302-2' was not found in the value set 'https://mednet.swiss/fhir/ValueSet/mni-obs-laboratory--0|0.5.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2756,7 +2651,6 @@ v: { "error" : "The provided code 'http://loinc.org#39156-5' was not found in the value set 'https://mednet.swiss/fhir/ValueSet/mni-obs-laboratory--0|0.5.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2797,7 +2691,6 @@ v: { "error" : "The provided code 'http://loinc.org#85354-9' was not found in the value set 'https://mednet.swiss/fhir/ValueSet/mni-obs-laboratory--0|0.5.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2838,7 +2731,6 @@ v: { "error" : "The provided code 'http://loinc.org#883-9' was not found in the value set 'https://mednet.swiss/fhir/ValueSet/mni-obs-laboratory--0|0.5.0'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -2879,7 +2771,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2902,7 +2793,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2926,7 +2816,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2950,7 +2839,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2974,7 +2862,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -2998,7 +2885,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3023,7 +2909,6 @@ v: { "error" : "Wrong Display Name 'NDC labeler code request' for http://loinc.org#51726-8. Valid display is one of 22 choices: 'FDA product label NDC labeler code request', 'FDA label NDC labeler code request', 'FDA 药品标签 National Drug Code' (zh-CN), 'NDC' (zh-CN), '国家药品验证号' (zh-CN), '国家药品代码' (zh-CN), '美国国家药品代码' (zh-CN), '全国药品代码' (zh-CN), 'NDC labeler code' (zh-CN), 'NDC 标识者识别代码' (zh-CN), 'NDC 厂家号' (zh-CN), 'NDC 贴签厂商代码请求' (zh-CN), 'NDC 标签号申请 叙述' (zh-CN), '叙述性文字' (zh-CN), '报告' (zh-CN), '报告型' (zh-CN), '文字叙述' (zh-CN), '文本叙述型' (zh-CN), '文本描述' (zh-CN), '文本描述型 监管类文档' (zh-CN), 'Documentazione normativa Etichetta di prodotto della Food and Drug Administ' (it-IT) or 'Описательный' (ru-RU) (for the language(s) '--')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -3064,7 +2949,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3089,7 +2973,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3112,7 +2995,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3137,7 +3019,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3163,7 +3044,6 @@ v: { "error" : "Wrong Display Name 'Allergies and adverse reactions' for http://loinc.org#48765-2. Valid display is one of 28 choices: 'Allergies and adverse reactions Document', 'Allergies &or adverse reactions Doc', '临床文档型' (zh-CN), '临床文档' (zh-CN), '文档' (zh-CN), '文书' (zh-CN), '医疗文书' (zh-CN), '临床医疗文书 医疗服务对象' (zh-CN), '客户' (zh-CN), '病人' (zh-CN), '病患' (zh-CN), '病号' (zh-CN), '超系统 - 病人 发现是一个原子型临床观察指标,并不是作为印象的概括陈述。体格检查、病史、系统检查及其他此类观察指标的属性均为发现。它们的标尺对于编码型发现可能是名义型,而对于叙述型文本之中所报告的发现,则可能是叙述型。' (zh-CN), '发现物' (zh-CN), '所见' (zh-CN), '结果' (zh-CN), '结论 变态反应与不良反应 文档.其他' (zh-CN), '杂项类文档' (zh-CN), '其他文档 时刻' (zh-CN), '随机' (zh-CN), '随意' (zh-CN), '瞬间 杂项' (zh-CN), '杂项类' (zh-CN), '杂项试验 过敏反应' (zh-CN), '过敏' (zh-CN), 'Allergie e reazioni avverse Documentazione miscellanea Miscellanea Osservazione paziente Punto nel tempo (episodio)' (it-IT), 'Документ Точка во времени' (ru-RU) or 'Момент' (ru-RU) (for the language(s) '--')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -3204,7 +3084,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3227,7 +3106,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3251,7 +3129,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3274,7 +3151,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3299,7 +3175,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3323,7 +3198,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3346,7 +3220,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3370,7 +3243,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3394,7 +3266,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3418,7 +3289,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3442,7 +3312,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3466,7 +3335,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3490,7 +3358,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3514,7 +3381,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3538,7 +3404,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3562,7 +3427,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3586,7 +3450,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3610,7 +3473,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3633,7 +3495,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3657,7 +3518,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3681,7 +3541,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3704,7 +3563,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3728,7 +3586,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3752,7 +3609,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3775,7 +3631,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3799,7 +3654,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3823,7 +3677,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3846,7 +3699,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3870,7 +3722,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3894,7 +3745,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3917,7 +3767,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3941,7 +3790,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3965,7 +3813,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -3988,7 +3835,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4012,7 +3858,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4036,7 +3881,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4059,7 +3903,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4083,7 +3926,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4107,7 +3949,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4130,7 +3971,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4154,7 +3994,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4178,7 +4017,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4202,7 +4040,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4226,7 +4063,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4249,7 +4085,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4273,7 +4108,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4297,7 +4131,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4320,7 +4153,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4344,7 +4176,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4368,7 +4199,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4391,7 +4221,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4415,7 +4244,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4439,7 +4267,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4463,7 +4290,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4486,7 +4312,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4510,7 +4335,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4534,7 +4358,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4557,7 +4380,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4581,7 +4403,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4604,7 +4425,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4628,7 +4448,6 @@ v: { "error" : "Unknown code '�g��' in the CodeSystem 'http://loinc.org' version '2.74'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -4669,7 +4488,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4692,7 +4510,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4716,7 +4533,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4740,7 +4556,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4764,7 +4579,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4789,7 +4603,6 @@ v: { "error" : "Wrong Display Name '����' for http://loinc.org#18684-1. Valid display is 'First Blood pressure Set' (for the language(s) 'en')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -4831,7 +4644,6 @@ v: { "error" : "Wrong Display Name '���k������' for http://loinc.org#8480-6. Valid display is one of 2 choices: 'Systolic blood pressure' or 'BP sys' (for the language(s) 'en')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -4873,7 +4685,6 @@ v: { "error" : "Wrong Display Name '�g��������' for http://loinc.org#8462-4. Valid display is one of 2 choices: 'Diastolic blood pressure' or 'BP dias' (for the language(s) 'en')", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -4914,7 +4725,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4938,7 +4748,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4962,7 +4771,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -4986,7 +4794,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5011,7 +4818,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5036,7 +4842,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5061,7 +4866,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5085,7 +4889,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5109,7 +4912,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5133,7 +4935,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5158,7 +4959,6 @@ v: { "error" : "The provided code 'http://loinc.org#59408-5 ('Oxygen saturation in Arterial blood by Pulse oximetry')' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -5198,7 +4998,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5221,7 +5020,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5244,7 +5042,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5267,7 +5064,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5290,7 +5086,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5313,7 +5108,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5336,7 +5130,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5359,7 +5152,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5382,7 +5174,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5405,7 +5196,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5440,7 +5230,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5475,7 +5264,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5510,7 +5298,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5545,7 +5332,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5580,7 +5366,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5615,7 +5400,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5638,7 +5422,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5661,7 +5444,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5685,7 +5467,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5709,7 +5490,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5733,7 +5513,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5757,7 +5536,6 @@ v: { "error" : "The provided code 'http://loinc.org#96607-7' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -5798,7 +5576,6 @@ v: { "error" : "The provided code 'http://loinc.org#96608-5' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -5839,7 +5616,6 @@ v: { "error" : "The provided code 'http://loinc.org#96609-3' was not found in the value set 'http://hl7.org/fhir/ValueSet/observation-vitalsignresult--0|4.0.1'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -5880,7 +5656,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5904,7 +5679,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5928,7 +5702,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5952,7 +5725,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -5976,7 +5748,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6000,7 +5771,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6024,7 +5794,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6175,7 +5944,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6254,7 +6022,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6313,7 +6080,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6404,7 +6170,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6475,7 +6240,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6514,7 +6278,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6553,7 +6316,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6576,7 +6338,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6599,7 +6360,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6635,7 +6395,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6671,7 +6430,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6695,7 +6453,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6719,7 +6476,6 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } @@ -6743,7 +6499,6 @@ v: { "error" : "Unknown code 'test' in the CodeSystem 'http://loinc.org' version '2.74'", "class" : "UNKNOWN", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome", "issue" : [{ @@ -6783,10 +6538,51 @@ v: { "system" : "http://loinc.org", "version" : "2.74", "server" : "http://tx-dev.fhir.org/r4", - "unknown-systems" : "", "issues" : { "resourceType" : "OperationOutcome" } } ------------------------------------------------------------------------------------- +{"code" : { + "system" : "http://loinc.org", + "code" : "5792-7" +}, "valueSet" :{ + "resourceType" : "ValueSet" +}, "langs":"", "useServer":"true", "useClient":"false", "guessSystem":"false", "activeOnly":"false", "membershipOnly":"true", "displayWarningMode":"false", "versionFlexible":"true", "profile": { + "resourceType" : "Parameters", + "parameter" : [{ + "name" : "profile-url", + "valueString" : "http://hl7.org/fhir/ExpansionProfile/dc8fd4bc-091a-424a-8a3b-6198ef146891" + }] +}}#### +v: { + "code" : "5792-7", + "severity" : "error", + "error" : "The provided code 'http://loinc.org#5792-7' was not found in the value set 'http://hl7.org/fhir/ValueSet/birthDate'", + "class" : "UNKNOWN", + "server" : "http://tx-dev.fhir.org/r4", + "unknown-systems" : "", + "issues" : { + "resourceType" : "OperationOutcome", + "issue" : [{ + "extension" : [{ + "url" : "http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-server", + "valueUrl" : "http://tx-dev.fhir.org/r4" + }], + "severity" : "error", + "code" : "code-invalid", + "details" : { + "coding" : [{ + "system" : "http://hl7.org/fhir/tools/CodeSystem/tx-issue-type", + "code" : "not-in-vs" + }], + "text" : "The provided code 'http://loinc.org#5792-7' was not found in the value set 'http://hl7.org/fhir/ValueSet/birthDate'" + }, + "location" : ["Coding.code"], + "expression" : ["Coding.code"] + }] +} + +} +------------------------------------------------------------------------------------- From ebfd70477c052ea35debeda61fec103109c776ff Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 30 Jan 2024 19:05:49 +1100 Subject: [PATCH 4/5] fix mini-terminology server bugs around unknown systems --- .../fhir/r5/terminologies/validation/ValueSetValidator.java | 6 +++++- .../hl7/fhir/terminology/tests/TerminologyServiceTests.java | 3 ++- pom.xml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java index 4ec3e3444..258276f08 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java @@ -356,6 +356,9 @@ public class ValueSetValidator extends ValueSetProcessBase { res.setVersion(foundCoding.hasVersion() ? foundCoding.getVersion() : foundCoding.hasUserData("cs") ? ((CodeSystem) foundCoding.getUserData("cs")).getVersion() : null); res.setDisplay(cd.getDisplay()); } + if (info.getErr() != null) { + res.setErrorClass(info.getErr()); + } res.setUnknownSystems(unknownSystems); res.addCodeableConcept(vcc); return res; @@ -669,7 +672,7 @@ public class ValueSetValidator extends ValueSetProcessBase { res.setDefinition(null); res.setSystem(null); res.setDisplay(null); - res.setUnknownSystems(unknownSystems); + res.setUnknownSystems(unknownSystems); // } } else if (warningMessage!=null) { String msg = context.formatMessage(I18nConstants.CODE_FOUND_IN_EXPANSION_HOWEVER_, warningMessage); @@ -1309,6 +1312,7 @@ public class ValueSetValidator extends ValueSetProcessBase { } return res.isOk(); } else { + info.setErr(TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED); if (unknownSystems != null) { if (version == null) { unknownSystems.add(system); diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/terminology/tests/TerminologyServiceTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/terminology/tests/TerminologyServiceTests.java index 957dab3a2..94767e111 100644 --- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/terminology/tests/TerminologyServiceTests.java +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/terminology/tests/TerminologyServiceTests.java @@ -37,6 +37,7 @@ import org.hl7.fhir.r5.model.UriType; import org.hl7.fhir.r5.model.ValueSet; import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionParameterComponent; import org.hl7.fhir.r5.terminologies.expansion.ValueSetExpansionOutcome; +import org.hl7.fhir.r5.terminologies.utilities.TerminologyServiceErrorClass; import org.hl7.fhir.r5.terminologies.utilities.ValidationResult; import org.hl7.fhir.r5.test.utils.CompareUtilities; import org.hl7.fhir.r5.test.utils.TestingUtilities; @@ -375,7 +376,7 @@ public class TerminologyServiceTests { } if (vm.getUnknownSystems() != null) { for (String s : vm.getUnknownSystems()) { - res.addParameter("x-caused-by-unknown-system", new CanonicalType(s)); + res.addParameter(vm.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED ? "x-caused-by-unknown-system" : "x-unknown-system", new CanonicalType(s)); } } if (vm.getIssues().size() > 0) { diff --git a/pom.xml b/pom.xml index 22c45d355..21b8c970d 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 32.0.1-jre 6.4.1 - 1.4.27 + 1.4.28-SNAPSHOT 2.16.0 5.9.2 1.8.2 From dd3770d0933bca1437f7c006cdb36e25621de246 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 30 Jan 2024 19:06:06 +1100 Subject: [PATCH 5/5] fix bug in deciding whether a value is supported by the server --- .../validation/instance/type/StructureDefinitionValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java index f33baa616..f82b128ad 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java @@ -910,7 +910,7 @@ public class StructureDefinitionValidator extends BaseValidator { } private boolean serverSupportsValueSet(String ref) { - ValidationResult vr = context.validateCode(new ValidationOptions(FhirPublication.R5).withCheckValueSetOnly().withVsAsUrl().withNoClient(), new Coding("http://loinc.org", "5792-7", null), new ValueSet().setUrl(ref)); + ValidationResult vr = context.validateCode(new ValidationOptions(FhirPublication.R5).withCheckValueSetOnly().withNoClient(), new Coding("http://loinc.org", "5792-7", null), new ValueSet().setUrl(ref)); return vr.getErrorClass() == null || vr.getErrorClass() == TerminologyServiceErrorClass.UNKNOWN; }