Feature - run JUnit tests from validator_cli (#835)
* WIP add initial test running code * Importing test modules fix breaking tests 1 * Clean up pom dependencies, move execution before context load * Re-org and document cli pom * Set more dependencies to compile. Print entries in classpath * Try running via internal Executors * Clearer class names + provide clear output * Clean up test summarys and output + update class regex to junit default * Refactor to avoid having to extend class * Trim down dependency additions in pom + javadoc * Add the rest of the modules to TestExecutor * Parse additional params for classname filter and module * Add experimental JUnit 4 runner in case JUnit 5 hates us. * Include JUnit4 tests via adapters. Need to refactor for better naming. * Update LoadIgTests to JUnit 5 * Gentle refactor, print execution time * Remove unnecessary interface, organize packages * Remove cached resources (need to fix this) * Allow setting of txCache globally for tests + fix r5 tests * Mild refactor of TestExecutor + Reorder test execution * Add fhirTestCasesDirectory to testConfig + get r4 tests working * Add dstu2016may and dstu3 tests * Add dstu2 tests * Add convertors tests * Refactor resourceNameForFile + don't copy existing files * Get all txCache directories centrally and allow all to live in same dir * Start extracting txCache resources * Finish extracting txCache resources * Fix failing GraphQLEngineTest * Try an mvn install for the pull pipeline * Clean and refactor * Test coverage * Fix GraphQLEngineTests for local jar run * More refactoring, more tests * Add bare test for TxCacheResourceExtractor Co-authored-by: dotasek <david.otasek@smilecdr.com>
This commit is contained in:
parent
2783a5e3aa
commit
1fee28fe84
|
@ -35,6 +35,9 @@ import java.io.FileInputStream;
|
|||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -52,6 +55,7 @@ import org.hl7.fhir.utilities.TextFile;
|
|||
import org.hl7.fhir.utilities.Utilities;
|
||||
import org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager;
|
||||
import org.hl7.fhir.utilities.npm.ToolsVersion;
|
||||
import org.hl7.fhir.utilities.tests.ResourceLoaderTests;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
|
@ -438,15 +442,45 @@ public class TestingUtilities {
|
|||
return "Strings differ in length: "+Integer.toString(s1.length())+" vs "+Integer.toString(s2.length())+" but match to the end of the shortest";
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static String resourceNameToFile(String name) throws IOException {
|
||||
return Utilities.path(System.getProperty("user.dir"), "src", "test", "resources", name);
|
||||
//return Utilities.path(System.getProperty("user.dir"), "src", "test", "resources", name);
|
||||
return resourceNameToFile(null, name);
|
||||
}
|
||||
|
||||
private static boolean fileForPathExists(String path) {
|
||||
return new File(path).exists();
|
||||
}
|
||||
|
||||
public static String generateResourcePath(String subFolder, String name) throws IOException {
|
||||
String path = Utilities.path(System.getProperty("user.dir"), "src", "test", "resources", subFolder, name);
|
||||
createParentDirectoryPathIfNotExists(Paths.get(path));
|
||||
return path;
|
||||
}
|
||||
public static String resourceNameToFile(String subFolder, String name) throws IOException {
|
||||
return Utilities.path(System.getProperty("user.dir"), "src", "test", "resources", subFolder, name);
|
||||
|
||||
final String resourcePath = (subFolder != null ? subFolder + "/" : "") + name;
|
||||
final String filePathFromClassLoader = TestingUtilities.class.getClassLoader().getResource(resourcePath).getPath();
|
||||
|
||||
if (fileForPathExists(filePathFromClassLoader)) {
|
||||
return filePathFromClassLoader;
|
||||
} else {
|
||||
final Path newFilePath = (subFolder != null) ? Paths.get("target", subFolder, name) : Paths.get("target", name);
|
||||
copyResourceToNewFile(resourcePath, newFilePath);
|
||||
return newFilePath.toString();
|
||||
}
|
||||
}
|
||||
|
||||
private static void copyResourceToNewFile(String resourcePath, Path newFilePath) throws IOException {
|
||||
createParentDirectoryPathIfNotExists(newFilePath);
|
||||
ResourceLoaderTests.copyResourceToFile(TestingUtilities.class, newFilePath, resourcePath);
|
||||
}
|
||||
|
||||
private static void createParentDirectoryPathIfNotExists(Path newFilePath) {
|
||||
Path parent = newFilePath.getParent();
|
||||
if (!parent.toFile().exists()) {
|
||||
parent.toFile().mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -111,8 +111,10 @@ public class GraphQLEngineTests implements IGraphQLStorageServices {
|
|||
StringBuilder str = new StringBuilder();
|
||||
gql.getOutput().setWriteWrapper(false);
|
||||
gql.getOutput().write(str, 0);
|
||||
TextFile.stringToFile(str.toString(), TestingUtilities.resourceNameToFile("graphql", output + ".out"));
|
||||
msg = TestingUtilities.checkJsonIsSame(TestingUtilities.resourceNameToFile("graphql", output + ".out"), TestingUtilities.resourceNameToFile("graphql", output));
|
||||
String actualFilePath = TestingUtilities.generateResourcePath("graphql", output + ".out");
|
||||
|
||||
TextFile.stringToFile(str.toString(), actualFilePath);
|
||||
msg = TestingUtilities.checkJsonIsSame(actualFilePath, TestingUtilities.resourceNameToFile("graphql", output));
|
||||
Assertions.assertTrue(Utilities.noString(msg), msg);
|
||||
} else
|
||||
Assertions.assertTrue(output.equals("$error"), "Error, but proper output was expected (" + msg + ")");
|
||||
|
|
|
@ -27,7 +27,9 @@ import org.hl7.fhir.utilities.Utilities;
|
|||
import org.hl7.fhir.utilities.xhtml.NodeType;
|
||||
import org.hl7.fhir.utilities.xhtml.XhtmlComposer;
|
||||
import org.hl7.fhir.utilities.xhtml.XhtmlNode;
|
||||
import org.junit.Assert;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
@ -74,13 +76,13 @@ public class NarrativeGeneratorTests {
|
|||
DateTimeType dt = new DateTimeType(src);
|
||||
String actual = new DataRenderer(rc).display(dt);
|
||||
|
||||
Assert.assertTrue("Actual = "+actual+", expected one of "+Utilities.toString(expected), Utilities.existsInList(actual, expected));
|
||||
assertTrue(Utilities.existsInList(actual, expected), "Actual = "+actual+", expected one of "+Utilities.toString(expected));
|
||||
XhtmlNode node = new XhtmlNode(NodeType.Element, "p");
|
||||
new DataRenderer(rc).render(node, dt);
|
||||
actual = new XhtmlComposer(true, false).compose(node);
|
||||
Assert.assertTrue(actual.startsWith("<p>"));
|
||||
Assert.assertTrue(actual.endsWith("</p>"));
|
||||
Assert.assertTrue("Actual = "+actual+", expected one of "+Utilities.toString(expected), Utilities.existsInList(actual.substring(0, actual.length()-4).substring(3), expected));
|
||||
assertTrue(actual.startsWith("<p>"));
|
||||
assertTrue(actual.endsWith("</p>"));
|
||||
assertTrue(Utilities.existsInList(actual.substring(0, actual.length()-4).substring(3), expected), "Actual = "+actual+", expected one of "+Utilities.toString(expected));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir-base</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
|
@ -146,6 +146,16 @@
|
|||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.atlassian.commonmark</groupId>
|
||||
<artifactId>commonmark</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.atlassian.commonmark</groupId>
|
||||
<artifactId>commonmark-ext-gfm-tables</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- JUnit Jupiter -->
|
||||
<dependency>
|
||||
|
@ -160,16 +170,6 @@
|
|||
<version>${junit_jupiter_version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.atlassian.commonmark</groupId>
|
||||
<artifactId>commonmark</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.atlassian.commonmark</groupId>
|
||||
<artifactId>commonmark-ext-gfm-tables</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -192,4 +192,4 @@
|
|||
</resources>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
</project>
|
|
@ -28,6 +28,7 @@ import org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager;
|
|||
import org.hl7.fhir.utilities.npm.NpmPackage;
|
||||
import org.hl7.fhir.utilities.npm.ToolsVersion;
|
||||
import org.hl7.fhir.utilities.tests.BaseTestingUtilities;
|
||||
import org.hl7.fhir.utilities.tests.TestConfig;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
|
@ -125,14 +126,18 @@ public class TestingUtilities extends BaseTestingUtilities {
|
|||
}
|
||||
}
|
||||
|
||||
public static String getTerminologyCacheDirectory() {
|
||||
return TestConfig.getInstance().getTxCacheDirectory("org.hl7.fhir.r5");
|
||||
}
|
||||
|
||||
public static SimpleWorkerContext getWorkerContext(NpmPackage npmPackage) throws Exception {
|
||||
SimpleWorkerContext swc = new SimpleWorkerContext.SimpleWorkerContextBuilder().withAllowLoadingDuplicates(true).withUserAgent(TestConstants.USER_AGENT).withTerminologyCachePath(TestConstants.TX_CACHE).fromPackage(npmPackage);
|
||||
SimpleWorkerContext swc = new SimpleWorkerContext.SimpleWorkerContextBuilder().withAllowLoadingDuplicates(true).withUserAgent(TestConstants.USER_AGENT).withTerminologyCachePath(getTerminologyCacheDirectory()).fromPackage(npmPackage);
|
||||
TerminologyCache.setCacheErrors(true);
|
||||
return swc;
|
||||
}
|
||||
|
||||
public static SimpleWorkerContext getWorkerContext(NpmPackage npmPackage, IWorkerContext.IContextResourceLoader loader) throws Exception {
|
||||
SimpleWorkerContext swc = new SimpleWorkerContext.SimpleWorkerContextBuilder().withAllowLoadingDuplicates(true).withUserAgent(TestConstants.USER_AGENT).withTerminologyCachePath(TestConstants.TX_CACHE).fromPackage(npmPackage, loader);
|
||||
SimpleWorkerContext swc = new SimpleWorkerContext.SimpleWorkerContextBuilder().withAllowLoadingDuplicates(true).withUserAgent(TestConstants.USER_AGENT).withTerminologyCachePath(getTerminologyCacheDirectory()).fromPackage(npmPackage, loader);
|
||||
TerminologyCache.setCacheErrors(true);
|
||||
return swc;
|
||||
}
|
||||
|
|
|
@ -7,10 +7,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
@ -19,6 +19,7 @@ import java.util.stream.Collectors;
|
|||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.hl7.fhir.r5.formats.IParser;
|
||||
import org.hl7.fhir.r5.model.CanonicalResource;
|
||||
import org.hl7.fhir.r5.model.CapabilityStatement;
|
||||
|
@ -27,6 +28,7 @@ import org.hl7.fhir.r5.model.Coding;
|
|||
import org.hl7.fhir.r5.model.TerminologyCapabilities;
|
||||
import org.hl7.fhir.r5.model.ValueSet;
|
||||
import org.hl7.fhir.r5.terminologies.ValueSetExpander;
|
||||
import org.hl7.fhir.utilities.tests.ResourceLoaderTests;
|
||||
import org.hl7.fhir.utilities.validation.ValidationMessage;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
|
@ -36,7 +38,7 @@ import org.junit.jupiter.params.provider.MethodSource;
|
|||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonParser;
|
||||
|
||||
public class TerminologyCacheTests {
|
||||
public class TerminologyCacheTests implements ResourceLoaderTests {
|
||||
|
||||
static final ValueSet.ConceptSetComponent include = new ValueSet.ConceptSetComponent();
|
||||
static {
|
||||
|
@ -59,8 +61,9 @@ public class TerminologyCacheTests {
|
|||
private JsonParser jsonParser = new JsonParser();
|
||||
|
||||
private JsonElement getJsonFromFile(String filename) throws URISyntaxException, IOException {
|
||||
final Path path = Paths.get("src","test","resources", "context", filename);
|
||||
final String stringValue = new String ( Files.readAllBytes(path));
|
||||
InputStream inputStream = getResourceAsInputStream("context", filename);
|
||||
|
||||
final String stringValue = IOUtils.toString(inputStream, java.nio.charset.StandardCharsets.UTF_8);
|
||||
return jsonParser.parse(stringValue);
|
||||
};
|
||||
|
||||
|
|
|
@ -2,11 +2,11 @@ package org.hl7.fhir.r5.test.utils;
|
|||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import org.hl7.fhir.utilities.tests.ResourceLoaderTests;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Path;
|
||||
|
@ -16,16 +16,15 @@ import java.util.stream.Stream;
|
|||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
public class CompareUtilitiesTest {
|
||||
|
||||
public static final Path ROOT_TEST_PATH = Paths.get("src","test","resources", "testUtilities");
|
||||
public class CompareUtilitiesTests implements ResourceLoaderTests {
|
||||
|
||||
public static final Path ROOT_TEST_PATH = Paths.get("testUtilities");
|
||||
public static final Path ROOT_XML_TEST_PATH = ROOT_TEST_PATH.resolve("xml");
|
||||
public static final Path ROOT_JSON_TEST_PATH = ROOT_TEST_PATH.resolve("json");
|
||||
|
||||
|
||||
public String getResourceAsString(String path) throws IOException {
|
||||
InputStream inputStream = new FileInputStream(path);
|
||||
InputStream inputStream = getResourceAsInputStream(path);
|
||||
String contents = IOUtils.toString(inputStream, java.nio.charset.StandardCharsets.UTF_8);
|
||||
return contents.trim();
|
||||
}
|
||||
|
@ -52,15 +51,20 @@ public class CompareUtilitiesTest {
|
|||
@ParameterizedTest
|
||||
@MethodSource("getCompareXMLParams")
|
||||
public void testCompareXML(String expectedFileName, String actualFileName, String expectedOutputFileName) throws Exception {
|
||||
final String expectedXMLPath = ROOT_XML_TEST_PATH.resolve(expectedFileName).toAbsolutePath().toString();
|
||||
final String actualXMLPath = ROOT_XML_TEST_PATH.resolve(actualFileName).toAbsolutePath().toString();
|
||||
final String expectedXMLPath = ROOT_XML_TEST_PATH.resolve(expectedFileName).toString();
|
||||
final String actualXMLPath = ROOT_XML_TEST_PATH.resolve(actualFileName).toString();
|
||||
|
||||
final String actualOutput = CompareUtilities.checkXMLIsSame(expectedXMLPath, actualXMLPath);
|
||||
ClassLoader classLoader = CompareUtilitiesTests.class.getClassLoader();
|
||||
|
||||
InputStream expectedXMLStream = classLoader.getResourceAsStream(expectedXMLPath);
|
||||
InputStream actualXMLStream = classLoader.getResourceAsStream(actualXMLPath);
|
||||
|
||||
final String actualOutput = CompareUtilities.checkXMLIsSame(expectedXMLStream, actualXMLStream);
|
||||
|
||||
if (expectedOutputFileName == null) {
|
||||
assertNull(actualOutput);
|
||||
} else {
|
||||
final String expectedOutputPath = ROOT_XML_TEST_PATH.resolve(expectedOutputFileName).toAbsolutePath().toString();
|
||||
final String expectedOutputPath = ROOT_XML_TEST_PATH.resolve(expectedOutputFileName).toString();
|
||||
String expectedOutput = normalizeNewlines(getResourceAsString(expectedOutputPath));
|
||||
assertEquals(expectedOutput, normalizeNewlines(actualOutput));
|
||||
}
|
||||
|
@ -84,14 +88,14 @@ public class CompareUtilitiesTest {
|
|||
@ParameterizedTest
|
||||
@MethodSource("getCompareJSONParams")
|
||||
public void testCompareJSON(String expectedFileName, String actualFileName, String expectedOutputFileName) throws IOException {
|
||||
final String expectedJSONPath = ROOT_JSON_TEST_PATH.resolve(expectedFileName).toAbsolutePath().toString();
|
||||
final String actualJSONPath = ROOT_JSON_TEST_PATH.resolve(actualFileName).toAbsolutePath().toString();
|
||||
final String expectedJSONPath = ROOT_JSON_TEST_PATH.resolve(expectedFileName).toString();
|
||||
final String actualJSONPath = ROOT_JSON_TEST_PATH.resolve(actualFileName).toString();
|
||||
|
||||
final String actualOutput = CompareUtilities.checkJsonSrcIsSame(getResourceAsString(expectedJSONPath), getResourceAsString(actualJSONPath), false);
|
||||
if (expectedOutputFileName == null) {
|
||||
assertNull(actualOutput);
|
||||
} else {
|
||||
final String expectedOutputPath = ROOT_JSON_TEST_PATH.resolve(expectedOutputFileName).toAbsolutePath().toString();
|
||||
final String expectedOutputPath = ROOT_JSON_TEST_PATH.resolve(expectedOutputFileName).toString();
|
||||
String expectedOutput = normalizeNewlines(getResourceAsString(expectedOutputPath));
|
||||
assertEquals(expectedOutput, normalizeNewlines(actualOutput));
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
-------------------------------------------------------------------------------------
|
||||
{"hierarchical" : false, "valueSet" :{
|
||||
"resourceType" : "ValueSet",
|
||||
"compose" : {
|
||||
"include" : [{
|
||||
"system" : "http://loinc.org",
|
||||
"concept" : [{
|
||||
"extension" : [{
|
||||
"url" : "http://hl7.org/fhir/StructureDefinition/valueset-label",
|
||||
"valueString" : "A."
|
||||
}],
|
||||
"code" : "LA20752-4",
|
||||
"display" : "Within 24 hours"
|
||||
},
|
||||
{
|
||||
"extension" : [{
|
||||
"url" : "http://hl7.org/fhir/StructureDefinition/valueset-label",
|
||||
"valueString" : "B."
|
||||
}],
|
||||
"code" : "LA20753-2",
|
||||
"display" : "After 24 hours but before 3 days"
|
||||
},
|
||||
{
|
||||
"extension" : [{
|
||||
"url" : "http://hl7.org/fhir/StructureDefinition/valueset-label",
|
||||
"valueString" : "C."
|
||||
}],
|
||||
"code" : "LA20754-0",
|
||||
"display" : "Three days or later"
|
||||
},
|
||||
{
|
||||
"extension" : [{
|
||||
"url" : "http://hl7.org/fhir/StructureDefinition/valueset-label",
|
||||
"valueString" : "D."
|
||||
}],
|
||||
"code" : "LA4489-6",
|
||||
"display" : "Unknown"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
}}####
|
||||
e: {
|
||||
"error" : "Cannot invoke \"org.hl7.fhir.r5.terminologies.TerminologyClient.expandValueset(org.hl7.fhir.r5.model.ValueSet, org.hl7.fhir.r5.model.Parameters, java.util.Map)\" because \"this.txClient\" is null"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -84,22 +84,60 @@
|
|||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>test</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.bytebuddy</groupId>
|
||||
<artifactId>byte-buddy</artifactId>
|
||||
<version>${byte_buddy_version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-engine</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.vintage</groupId>
|
||||
<artifactId>junit-vintage-engine</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-params</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>test</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.platform</groupId>
|
||||
<artifactId>junit-platform-launcher</artifactId>
|
||||
<version>${junit_platform_launcher_version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.hl7.fhir.testcases</groupId>
|
||||
<artifactId>fhir-test-cases</artifactId>
|
||||
<version>${validator_test_case_version}</version>
|
||||
<scope>test</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
<!--
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
|
|
|
@ -7,13 +7,12 @@ import org.hl7.fhir.utilities.ToolGlobalSettings;
|
|||
import org.hl7.fhir.utilities.Utilities;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BaseTestingUtilities {
|
||||
|
||||
static public boolean silent;
|
||||
|
||||
|
||||
public static String loadTestResource(String... paths) throws IOException {
|
||||
/**
|
||||
* This 'if' condition checks to see if the fhir-test-cases project (https://github.com/FHIR/fhir-test-cases) is
|
||||
|
@ -24,7 +23,7 @@ public class BaseTestingUtilities {
|
|||
* at the same directory level as the core project.
|
||||
*/
|
||||
|
||||
String dir = System.getenv("FHIR-TEST-CASES");
|
||||
String dir = TestConfig.getInstance().getFhirTestCasesDirectory();
|
||||
if (dir == null && ToolGlobalSettings.hasTestsPath()) {
|
||||
dir = ToolGlobalSettings.getTestsPath();
|
||||
}
|
||||
|
@ -48,7 +47,7 @@ public class BaseTestingUtilities {
|
|||
|
||||
|
||||
public static InputStream loadTestResourceStream(String... paths) throws IOException {
|
||||
String dir = System.getenv("FHIR-TEST-CASES");
|
||||
String dir = TestConfig.getInstance().getFhirTestCasesDirectory();
|
||||
if (dir == null && ToolGlobalSettings.hasTestsPath()) {
|
||||
dir = ToolGlobalSettings.getTestsPath();
|
||||
}
|
||||
|
@ -66,7 +65,7 @@ public class BaseTestingUtilities {
|
|||
}
|
||||
|
||||
public static byte[] loadTestResourceBytes(String... paths) throws IOException {
|
||||
String dir = System.getenv("FHIR-TEST-CASES");
|
||||
String dir = TestConfig.getInstance().getFhirTestCasesDirectory();
|
||||
if (dir == null && ToolGlobalSettings.hasTestsPath()) {
|
||||
dir = ToolGlobalSettings.getTestsPath();
|
||||
}
|
||||
|
@ -84,7 +83,7 @@ public class BaseTestingUtilities {
|
|||
}
|
||||
|
||||
public static boolean findTestResource(String... paths) throws IOException {
|
||||
String dir = System.getenv("FHIR-TEST-CASES");
|
||||
String dir = TestConfig.getInstance().getFhirTestCasesDirectory();
|
||||
if (dir == null && ToolGlobalSettings.hasTestsPath()) {
|
||||
dir = ToolGlobalSettings.getTestsPath();
|
||||
}
|
||||
|
@ -112,4 +111,7 @@ public class BaseTestingUtilities {
|
|||
Utilities.createDirectory(path);
|
||||
return path;
|
||||
}
|
||||
|
||||
public static void setFhirTestCasesDirectory(String s) {
|
||||
}
|
||||
}
|
|
@ -8,16 +8,12 @@ import java.util.List;
|
|||
|
||||
public class CacheVerificationLogger implements ToolingClientLogger {
|
||||
|
||||
public static final String FHIR_TXCACHE_REBUILD = "fhir.txcache.rebuild";
|
||||
|
||||
public static final String isRebuildingCache = System.getProperty(FHIR_TXCACHE_REBUILD);
|
||||
|
||||
@Getter
|
||||
int requests = 0;
|
||||
|
||||
@Override
|
||||
public void logRequest(String method, String url, List<String> headers, byte[] body) {
|
||||
if (!isRebuildingCache()) {
|
||||
if (!TestConfig.getInstance().isRebuildCache()) {
|
||||
System.err.println("Unexpected request to server");
|
||||
System.err.println(method);
|
||||
System.err.println(url);
|
||||
|
@ -48,18 +44,15 @@ public class CacheVerificationLogger implements ToolingClientLogger {
|
|||
|
||||
}
|
||||
|
||||
private boolean isRebuildingCache() {
|
||||
return isRebuildingCache != null && "TRUE".equals(isRebuildingCache.toUpperCase());
|
||||
}
|
||||
|
||||
|
||||
public boolean verifyHasNoRequests() {
|
||||
|
||||
if (isRebuildingCache()) {
|
||||
if (TestConfig.getInstance().isRebuildCache()) {
|
||||
return true;
|
||||
} else {
|
||||
if (requests != 0) {
|
||||
System.err.println(requests + " unexpected TX server requests logged. If a new test has been added, you may need to " +
|
||||
"rebuild the TX Cache for the test using the 'mvn test -D" + FHIR_TXCACHE_REBUILD + "=true' option");
|
||||
"rebuild the TX Cache for the test using the 'mvn test -D" + TestConfig.FHIR_TXCACHE_REBUILD + "=true' option");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
package org.hl7.fhir.utilities.tests;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
|
||||
public interface ResourceLoaderTests {
|
||||
|
||||
static final String PATH_DELIMITER = "/";
|
||||
|
||||
public static InputStream getResourceAsInputStream(Class<?> clazz, String... resourcePath) {
|
||||
return clazz.getClassLoader().getResourceAsStream(String.join(PATH_DELIMITER, resourcePath));
|
||||
}
|
||||
public default InputStream getResourceAsInputStream(String ... resourcePath) {
|
||||
return getResourceAsInputStream(this.getClass(), resourcePath);
|
||||
}
|
||||
|
||||
public default void copyResourceToFile(Path target, String ... resourcePath) throws IOException {
|
||||
copyResourceToFile(this.getClass(), target, resourcePath);
|
||||
}
|
||||
|
||||
public static void copyResourceToFile(Class<?> clazz, Path target, String ... resourcePath) throws IOException {
|
||||
InputStream initialStream = getResourceAsInputStream(clazz, resourcePath);
|
||||
|
||||
java.nio.file.Files.copy(
|
||||
initialStream,
|
||||
target,
|
||||
StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
initialStream.close();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package org.hl7.fhir.utilities.tests;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
|
||||
public class TestConfig {
|
||||
|
||||
private static final TestConfig INSTANCE = new TestConfig();
|
||||
|
||||
public static final String FHIR_TXCACHE_REBUILD = "fhir.txcache.rebuild";
|
||||
public static final String FHIR_TEST_CASES = "FHIR-TEST-CASES";
|
||||
|
||||
@Getter @Setter
|
||||
private boolean rebuildCache = System.getProperty(FHIR_TXCACHE_REBUILD) != null && "TRUE".equals(System.getProperty(FHIR_TXCACHE_REBUILD));
|
||||
|
||||
@Getter @Setter
|
||||
private String txCacheDirectory = TestConstants.TX_CACHE;
|
||||
|
||||
@Getter @Setter
|
||||
private String fhirTestCasesDirectory = System.getenv(FHIR_TEST_CASES);
|
||||
|
||||
public static TestConfig getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public String getTxCacheDirectory(String ... path) {
|
||||
return Paths.get(txCacheDirectory, path).toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
package org.hl7.fhir.validation.tests.utilities;
|
||||
package org.hl7.fhir.utilities.tests;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
|
||||
public class TestConstants {
|
||||
|
||||
|
||||
public static final java.lang.String TX_CACHE = Paths.get("src","test","resources", "txCache").toAbsolutePath().toString();
|
||||
|
||||
public static final java.lang.String TX_CACHE_LOG = Paths.get(System.getProperty("user.dir"), "tx.log.html").toAbsolutePath().toString();
|
|
@ -0,0 +1,6 @@
|
|||
package org.hl7.fhir.utilities.tests.execution;
|
||||
|
||||
public interface CliTestException {
|
||||
String getTestId();
|
||||
Throwable getException();
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.hl7.fhir.utilities.tests.execution;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface CliTestSummary {
|
||||
long getTestsFoundCount();
|
||||
long getTestsFailedCount();
|
||||
long getTestsAbortedCount();
|
||||
long getTestsSkippedCount();
|
||||
|
||||
List<CliTestException> getExceptions();
|
||||
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
package org.hl7.fhir.utilities.tests.execution;
|
||||
|
||||
import org.hl7.fhir.utilities.tests.execution.junit5.JUnit5ModuleTestExecutor;
|
||||
|
||||
import java.io.PrintStream;
|
||||
|
||||
public abstract class ModuleTestExecutor {
|
||||
private static final String FAILURE_SUMMARY_TEMPLATE = "Test failures for module %s (%d):";
|
||||
private static final String STARTING_TEST_TEMPLATE = "Starting: %s";
|
||||
|
||||
private static final String FINISHED_TEST_TEMPLATE = "Finished: %s with result: %s";
|
||||
private static final String FAILED_TEST_TEMPLATE = "Failed Test ID: %s";
|
||||
|
||||
/**
|
||||
* Utility method to print the summary of execution in human-readable
|
||||
* format.
|
||||
*
|
||||
* Any test failures are listed using the same unique IDs output in
|
||||
* the {@link JUnit5ModuleTestExecutor#executeTests(PrintStream, String)}
|
||||
* method.
|
||||
*
|
||||
* @param out the PrintStream to log summary data to.
|
||||
* @param testExecutionSummary the test summary
|
||||
* @param moduleName the module name
|
||||
*/
|
||||
public static void printSummmary(PrintStream out, CliTestSummary testExecutionSummary, String moduleName) {
|
||||
if (testExecutionSummary.getTestsFailedCount() > 0) {
|
||||
out.println("\n" + String.format(FAILURE_SUMMARY_TEMPLATE, moduleName, testExecutionSummary.getTestsFailedCount()));
|
||||
for (CliTestException failure : testExecutionSummary.getExceptions()) {
|
||||
out.println("\t" + failure.getTestId() + ": " + failure.getException().getMessage());
|
||||
}
|
||||
out.println();
|
||||
}
|
||||
}
|
||||
|
||||
public static void printTestStarted(PrintStream out, String displayName) {
|
||||
out.println(String.format(STARTING_TEST_TEMPLATE, displayName));
|
||||
}
|
||||
|
||||
public static void printTestFailed(PrintStream out, String uniqueIdentifier, Throwable throwable) {
|
||||
|
||||
out.println(String.format(FAILED_TEST_TEMPLATE, uniqueIdentifier));
|
||||
if (throwable != null) {
|
||||
throwable.printStackTrace(System.out);
|
||||
}
|
||||
}
|
||||
|
||||
public static void printTestFinished(PrintStream out, String displayName, String status) {
|
||||
out.println(String.format(FINISHED_TEST_TEMPLATE, displayName, status));
|
||||
}
|
||||
|
||||
public abstract String getModuleName();
|
||||
|
||||
public abstract CliTestSummary executeTests(PrintStream out, String classNameFilter);
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package org.hl7.fhir.utilities.tests.execution.junit4;
|
||||
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestException;
|
||||
import org.junit.runner.notification.Failure;
|
||||
|
||||
public class JUnit4TestException implements CliTestException {
|
||||
|
||||
private final Failure failure;
|
||||
|
||||
public JUnit4TestException(Failure failure) {
|
||||
this.failure = failure;
|
||||
}
|
||||
@Override
|
||||
public String getTestId() {
|
||||
return failure.getDescription().getClassName() + failure.getDescription().getMethodName() + failure.getDescription().getDisplayName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Throwable getException() {
|
||||
return failure.getException();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
package org.hl7.fhir.utilities.tests.execution.junit4;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestSummary;
|
||||
import org.hl7.fhir.utilities.tests.execution.ModuleTestExecutor;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runner.JUnitCore;
|
||||
import org.junit.runner.notification.Failure;
|
||||
import org.junit.runner.notification.RunListener;
|
||||
|
||||
import java.io.PrintStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class JUnit4TestExecutor extends ModuleTestExecutor {
|
||||
|
||||
@Getter
|
||||
private final String moduleName;
|
||||
|
||||
private final List<String> classNames;
|
||||
public JUnit4TestExecutor(String moduleName, List<String> classNames) {
|
||||
this.moduleName = moduleName + " (JUnit4)";
|
||||
this.classNames = Collections.unmodifiableList(new ArrayList<>(classNames));
|
||||
}
|
||||
|
||||
private class JUnit4RunListener extends RunListener {
|
||||
|
||||
PrintStream writer;
|
||||
public JUnit4RunListener(PrintStream writer) {
|
||||
this.writer = writer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testStarted(Description description) {
|
||||
ModuleTestExecutor.printTestStarted(writer, description.getDisplayName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testFinished(Description description) {
|
||||
ModuleTestExecutor.printTestFinished(writer, description.getDisplayName(),
|
||||
"FINISHED");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testFailure(Failure failure) {
|
||||
ModuleTestExecutor.printTestFailed(writer,
|
||||
|
||||
failure.getDescription().getDisplayName(),
|
||||
failure.getException()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public CliTestSummary executeTests(PrintStream out, String classNameFilter) {
|
||||
|
||||
JUnitCore junit = new JUnitCore();
|
||||
junit.addListener(new JUnit4RunListener(System.out));
|
||||
|
||||
Pattern pattern = classNameFilter != null ? Pattern.compile(classNameFilter) : null;
|
||||
|
||||
List<Class<?>> classes = classNames.stream()
|
||||
.filter(className -> pattern == null ? true : pattern.matcher(className).matches())
|
||||
.map(className -> {
|
||||
try {
|
||||
return Class.forName(className);
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Class<?>[] classArray = new Class[classes.size()];
|
||||
classes.toArray(classArray);
|
||||
|
||||
org.junit.runner.Result result = junit.run(classArray);
|
||||
return new JUnit4TestSummaryAdapter(result);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package org.hl7.fhir.utilities.tests.execution.junit4;
|
||||
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestException;
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestSummary;
|
||||
import org.junit.runner.Result;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class JUnit4TestSummaryAdapter implements CliTestSummary {
|
||||
|
||||
private final Result result;
|
||||
|
||||
public JUnit4TestSummaryAdapter(Result result) {
|
||||
this.result = result;
|
||||
}
|
||||
@Override
|
||||
public long getTestsFoundCount() {
|
||||
return result.getRunCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTestsFailedCount() {
|
||||
return result.getFailureCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTestsAbortedCount() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTestsSkippedCount() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CliTestException> getExceptions() {
|
||||
return result.getFailures().stream().map(ex -> new JUnit4TestException(ex)).collect(Collectors.toList());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,145 @@
|
|||
package org.hl7.fhir.utilities.tests.execution.junit5;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestSummary;
|
||||
import org.hl7.fhir.utilities.tests.execution.ModuleTestExecutor;
|
||||
import org.junit.platform.engine.TestExecutionResult;
|
||||
import org.junit.platform.launcher.*;
|
||||
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
|
||||
import org.junit.platform.launcher.core.LauncherFactory;
|
||||
import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
|
||||
import org.junit.platform.launcher.listeners.TestExecutionSummary;
|
||||
|
||||
import java.io.PrintStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.junit.platform.engine.discovery.ClassNameFilter.includeClassNamePatterns;
|
||||
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectPackage;
|
||||
|
||||
/**
|
||||
* This class allows JUnit 5 tests to be run in Java runtime.
|
||||
*
|
||||
* JUnit 4 tests ARE NOT SUPPORTED.
|
||||
*
|
||||
* This mimics for the most part the output of the Maven Surefire plugin, with
|
||||
* additional summaries and unique IDs for diagnosing failing tests.
|
||||
*/
|
||||
public class JUnit5ModuleTestExecutor extends ModuleTestExecutor {
|
||||
|
||||
|
||||
|
||||
private static final String SUMMARY_TEMPLATE = "Tests run: %d, Failures: %d, Errors: %d, Skipped: %d";
|
||||
|
||||
private static final String MODULE_FINISHED_TEMPLATE = "%s module tests finished.";
|
||||
public static final String DEFAULT_CLASSNAME_FILTER = org.junit.platform.engine.discovery.ClassNameFilter.STANDARD_INCLUDE_PATTERN;
|
||||
|
||||
|
||||
@Getter
|
||||
private final String moduleName;
|
||||
|
||||
@Getter
|
||||
private final List<String> packageNames;
|
||||
|
||||
public JUnit5ModuleTestExecutor(String moduleName, List<String> packageNames) {
|
||||
this.moduleName = moduleName;
|
||||
this.packageNames = Collections.unmodifiableList(packageNames);
|
||||
}
|
||||
|
||||
private List<org.junit.platform.engine.discovery.PackageSelector> getPackageSelectors() {
|
||||
final List<String> packageNames = getPackageNames();
|
||||
return packageNames.stream().map(it -> selectPackage(it)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
class ModuleTestExecutionListener extends SummaryGeneratingListener {
|
||||
|
||||
@Setter
|
||||
private PrintStream out;
|
||||
|
||||
@Override
|
||||
public void executionStarted(TestIdentifier testIdentifier) {
|
||||
ModuleTestExecutor.printTestStarted(out, testIdentifier.getDisplayName());
|
||||
super.executionStarted(testIdentifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) {
|
||||
//
|
||||
if (testExecutionResult.getStatus().equals(TestExecutionResult.Status.FAILED)) {
|
||||
ModuleTestExecutor.printTestFailed(out, testIdentifier.getUniqueId(), testExecutionResult.getThrowable().isPresent()
|
||||
? testExecutionResult.getThrowable().get()
|
||||
:null);
|
||||
}
|
||||
ModuleTestExecutor.printTestFinished(out,
|
||||
testIdentifier.getDisplayName(),
|
||||
testExecutionResult.getStatus().name()
|
||||
);
|
||||
super.executionFinished(testIdentifier, testExecutionResult);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute all tests defined in this module and return a TestExecutionSummary.
|
||||
*
|
||||
* Any stack traces required to diagnose test failures will be output at this
|
||||
* stage, along with a unique test ID.
|
||||
*
|
||||
* @param out the PrintStream to log execution or test failure.
|
||||
* @param classNameFilter a Regex to use to select tests. If null, this will
|
||||
* default to the JUnit console filter.
|
||||
* @return The test execution summary.
|
||||
*
|
||||
* @see org.junit.platform.engine.discovery.ClassNameFilter
|
||||
*/
|
||||
public CliTestSummary executeTests(PrintStream out, String classNameFilter) {
|
||||
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
|
||||
.selectors(
|
||||
getPackageSelectors()
|
||||
)
|
||||
.filters(
|
||||
includeClassNamePatterns(classNameFilter == null ? DEFAULT_CLASSNAME_FILTER : classNameFilter)
|
||||
)
|
||||
.build();
|
||||
|
||||
ModuleTestExecutionListener moduleTestExecutionlistener = new ModuleTestExecutionListener();
|
||||
moduleTestExecutionlistener.setOut(out);
|
||||
|
||||
try (LauncherSession session = LauncherFactory.openSession()) {
|
||||
Launcher launcher = session.getLauncher();
|
||||
|
||||
launcher.registerTestExecutionListeners(moduleTestExecutionlistener);
|
||||
|
||||
TestPlan testPlan = launcher.discover(request);
|
||||
// Execute test plan
|
||||
launcher.execute(testPlan);
|
||||
// Alternatively, execute the request directly
|
||||
// launcher.execute(request);
|
||||
}
|
||||
|
||||
TestExecutionSummary summary = moduleTestExecutionlistener.getSummary();
|
||||
|
||||
out.println("\n" + String.format(MODULE_FINISHED_TEMPLATE, getModuleName()));
|
||||
out.println(String.format(SUMMARY_TEMPLATE, summary.getTestsFoundCount(), summary.getTestsFailedCount(), summary.getTestsAbortedCount(), summary.getTestsSkippedCount()));
|
||||
|
||||
return new JUnit5TestSummaryAdapter(summary);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Create a ModuleTestExecutor for the standard case where the module name
|
||||
* maps to the package name of the root package containing tests.
|
||||
*
|
||||
* For example the module "org.hl7.fhir.r5" will be assumed to have all its
|
||||
* tests in the "org.hl7.fhir.r5" package or its child packages.
|
||||
*
|
||||
* @param moduleName The name of the module and root package containing tests.
|
||||
* @return the ModuleTestExecutor for the module
|
||||
*/
|
||||
public static JUnit5ModuleTestExecutor getStandardModuleTestExecutor(String moduleName) {
|
||||
return new JUnit5ModuleTestExecutor(moduleName, Arrays.asList(moduleName));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package org.hl7.fhir.utilities.tests.execution.junit5;
|
||||
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestException;
|
||||
import org.junit.platform.launcher.listeners.TestExecutionSummary;
|
||||
|
||||
public class JUnit5TestException implements CliTestException {
|
||||
|
||||
private final TestExecutionSummary.Failure ex;
|
||||
public JUnit5TestException(TestExecutionSummary.Failure ex) {
|
||||
this.ex = ex;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTestId() {
|
||||
return ex.getTestIdentifier().getUniqueId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Throwable getException() {
|
||||
return ex.getException();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package org.hl7.fhir.utilities.tests.execution.junit5;
|
||||
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestException;
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestSummary;
|
||||
import org.junit.platform.launcher.listeners.TestExecutionSummary;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class JUnit5TestSummaryAdapter implements CliTestSummary {
|
||||
|
||||
|
||||
final TestExecutionSummary testExecutionSummary;
|
||||
|
||||
public JUnit5TestSummaryAdapter( TestExecutionSummary testExecutionSummary) {
|
||||
this.testExecutionSummary = testExecutionSummary;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTestsFoundCount() {
|
||||
return testExecutionSummary.getTestsFoundCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTestsFailedCount() {
|
||||
return testExecutionSummary.getTestsFailedCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTestsAbortedCount() {
|
||||
return testExecutionSummary.getTestsAbortedCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTestsSkippedCount() {
|
||||
return testExecutionSummary.getTestsSkippedCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CliTestException> getExceptions() {
|
||||
return testExecutionSummary.getFailures().stream().map(ex -> new JUnit5TestException(ex)).collect(Collectors.toList());
|
||||
}
|
||||
}
|
|
@ -2,15 +2,20 @@ package org.hl7.fhir.utilities.npm;
|
|||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.hl7.fhir.utilities.tests.ResourceLoaderTests;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class PackageClientTest {
|
||||
public class PackageClientTest implements ResourceLoaderTests {
|
||||
|
||||
PackageClient packageClient = new PackageClient(PackageClient.PRIMARY_SERVER);
|
||||
|
||||
|
@ -26,8 +31,8 @@ public class PackageClientTest {
|
|||
|
||||
@Test
|
||||
@DisplayName("test getting package from JSON works")
|
||||
public void getPackageInfoFromJSONTest() throws java.io.IOException{
|
||||
final JsonObject jsonObject = new Gson().fromJson(Files.newBufferedReader(Paths.get("src", "test", "resources", "npm", "PackageClient-baseTestCase.json")), JsonObject.class);
|
||||
public void getPackageInfoFromJSONTest() throws java.io.IOException, URISyntaxException {
|
||||
final JsonObject jsonObject = new Gson().fromJson(new InputStreamReader(getResourceAsInputStream("npm","PackageClient-baseTestCase.json")), JsonObject.class);
|
||||
final PackageInfo packageInfo = packageClient.getPackageInfoFromJSON(jsonObject, null, null, null);
|
||||
|
||||
assertExpectedFields(packageInfo);
|
||||
|
@ -36,7 +41,7 @@ public class PackageClientTest {
|
|||
@Test
|
||||
@DisplayName("test getting package from JSON works")
|
||||
public void getPackageInfoWithIdFromJSONTest() throws java.io.IOException {
|
||||
final JsonObject jsonObject = new Gson().fromJson(Files.newBufferedReader(Paths.get("src", "test", "resources", "npm", "PackageClient-testCaseWithId.json")), JsonObject.class);
|
||||
final JsonObject jsonObject = new Gson().fromJson(new InputStreamReader(getResourceAsInputStream("npm", "PackageClient-testCaseWithId.json")), JsonObject.class);
|
||||
final PackageInfo packageInfo = packageClient.getPackageInfoFromJSON(jsonObject, null, null, null);
|
||||
|
||||
assertExpectedFields(packageInfo);
|
||||
|
|
|
@ -1,24 +1,35 @@
|
|||
package org.hl7.fhir.utilities.tests;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.transform.TransformerException;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.utilities.xls.XLSXmlNormaliser;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
public class XLSXmlNormaliserTests {
|
||||
public class XLSXmlNormaliserTests implements ResourceLoaderTests {
|
||||
|
||||
@Test
|
||||
public void testConvert() throws FHIRException, TransformerException, ParserConfigurationException, SAXException, IOException {
|
||||
XLSXmlNormaliser n = new XLSXmlNormaliser("src/test/resources/observation-spreadsheet.xml", "target/observation-spreadsheet.out.xml", true);
|
||||
final String inputFileName = "observation-spreadsheet.xml";
|
||||
Path inputPath = Paths.get("target", inputFileName);
|
||||
|
||||
copyResourceToFile(inputPath, inputFileName);
|
||||
|
||||
XLSXmlNormaliser n = new XLSXmlNormaliser(inputPath.toString(), "target/observation-spreadsheet.out.xml", true);
|
||||
n.go();
|
||||
// n = new XLSXmlNormaliser("C:\\work\\org.hl7.fhir\\build\\source\\observation\\observation-spreadsheet.before.xml", "C:\\\\work\\\\org.hl7.fhir\\\\build\\\\source\\\\observation\\\\observation-spreadsheet.before.out.xml", true);
|
||||
// n.go();
|
||||
|
||||
Assertions.assertTrue(true);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package org.hl7.fhir.utilities.tests.execution;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class DummyJUnit4Test {
|
||||
|
||||
@Test
|
||||
public void myTest() {};
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.hl7.fhir.utilities.tests.execution;
|
||||
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class DummyJUnit5Test {
|
||||
|
||||
@Test
|
||||
public void myTest() {};
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package org.hl7.fhir.utilities.tests.execution;
|
||||
|
||||
import org.hl7.fhir.utilities.tests.execution.junit4.JUnit4TestExecutor;
|
||||
import org.hl7.fhir.utilities.tests.execution.junit5.JUnit5ModuleTestExecutor;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class ModuleTestExecutorTests {
|
||||
|
||||
@Test
|
||||
public void testJUnit4ModuleTestExecutor() {
|
||||
ModuleTestExecutor junit4ModuleTestExecutor = new JUnit4TestExecutor("org.hl7.fhir.utilities", Arrays.asList("org.hl7.fhir.utilities.tests.execution.DummyJUnit4Test"));
|
||||
|
||||
assertEquals("org.hl7.fhir.utilities (JUnit4)", junit4ModuleTestExecutor.getModuleName());
|
||||
|
||||
CliTestSummary cliTestSummary = junit4ModuleTestExecutor.executeTests(System.out, null);
|
||||
|
||||
assertEquals(1, cliTestSummary.getTestsFoundCount());
|
||||
assertEquals(0, cliTestSummary.getExceptions().size());
|
||||
assertEquals(0, cliTestSummary.getTestsFailedCount());
|
||||
assertEquals(0, cliTestSummary.getTestsAbortedCount());
|
||||
assertEquals(0, cliTestSummary.getTestsSkippedCount());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJUnit5ModuleTestExecutor() {
|
||||
ModuleTestExecutor junit5ModuleTestExecutor = new JUnit5ModuleTestExecutor("org.hl7.fhir.utilities", Arrays.asList("org.hl7.fhir.utilities.tests.execution"));
|
||||
|
||||
assertEquals("org.hl7.fhir.utilities", junit5ModuleTestExecutor.getModuleName());
|
||||
|
||||
CliTestSummary cliTestSummary = junit5ModuleTestExecutor.executeTests(System.out, ".*DummyJUnit5Test");
|
||||
|
||||
assertEquals(1, cliTestSummary.getTestsFoundCount());
|
||||
assertEquals(0, cliTestSummary.getExceptions().size());
|
||||
assertEquals(0, cliTestSummary.getTestsFailedCount());
|
||||
assertEquals(0, cliTestSummary.getTestsAbortedCount());
|
||||
assertEquals(0, cliTestSummary.getTestsSkippedCount());
|
||||
|
||||
}
|
||||
}
|
|
@ -19,6 +19,227 @@
|
|||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- JUnit Jupiter -->
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.bytebuddy</groupId>
|
||||
<artifactId>byte-buddy</artifactId>
|
||||
<version>${byte_buddy_version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-engine</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<!-- shoo!
|
||||
<dependency>
|
||||
<groupId>org.junit.vintage</groupId>
|
||||
<artifactId>junit-vintage-engine</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
-->
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-params</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.platform</groupId>
|
||||
<artifactId>junit-platform-launcher</artifactId>
|
||||
<version>${junit_platform_launcher_version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- org.hl7.fhir.core test-jars -->
|
||||
<!--
|
||||
These jars contain the test code for running unit tests at runtime.
|
||||
Any modules that are intended to be run via the validator -run-tests
|
||||
option need to be included here.
|
||||
-->
|
||||
|
||||
<dependency>
|
||||
<groupId>org.hl7.fhir.testcases</groupId>
|
||||
<artifactId>fhir-test-cases</artifactId>
|
||||
<version>${validator_test_case_version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.utilities</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.convertors</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.dstu2</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.dstu3</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.dstu2016may</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.r4</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.r4b</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.r5</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.validation</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- /org.hl7.fhir.core test-jars -->
|
||||
|
||||
<!-- org.hl7.fhir.core test-jar dependencies -->
|
||||
<!--
|
||||
If the included org.hl7.fhir.xxx test jars have dependencies, they
|
||||
will have a <scope>test</scope> entry. This will prevent them from
|
||||
being included in regular runtime, so we override this with a
|
||||
duplicate entry below with <scope>compile<scope/>
|
||||
-->
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>${mockito_version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-junit-jupiter</artifactId>
|
||||
<version>${mockito_version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.atlassian.commonmark</groupId>
|
||||
<artifactId>commonmark</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.atlassian.commonmark</groupId>
|
||||
<artifactId>commonmark-ext-gfm-tables</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>4.0.1</version>
|
||||
<optional>false</optional>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>4.0.1</version>
|
||||
<optional>false</optional>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.everit.json</groupId>
|
||||
<artifactId>org.everit.json.schema</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>mockwebserver</artifactId>
|
||||
<version>4.9.0</version>
|
||||
<optional>false</optional>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.antlr</groupId>
|
||||
<artifactId>ST4</artifactId>
|
||||
<version>4.1</version>
|
||||
<optional>false</optional>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- /org.hl7.fhir.core test-jar dependencies -->
|
||||
|
||||
<!--
|
||||
The following dependencies are all listed as optional dependencies in
|
||||
org.hl7.fhir.utilities (and others) but are required for the CLI to work,
|
||||
|
@ -63,7 +284,7 @@
|
|||
<plugins>
|
||||
|
||||
<!--
|
||||
Build a fatjar containing all depenedncies
|
||||
Build a fatjar containing all dependencies
|
||||
-->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
|
@ -94,6 +315,7 @@
|
|||
<archive>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<classpathLayoutType>repository</classpathLayoutType>
|
||||
<mainClass>org.hl7.fhir.validation.ValidatorCli</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
|
@ -180,7 +402,7 @@
|
|||
<groupId>org.sonatype.plugins</groupId>
|
||||
<artifactId>nexus-staging-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<skip>true</skip>
|
||||
<skipStaging>true</skipStaging>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
|
|
@ -25,6 +25,24 @@
|
|||
<artifactId>org.hl7.fhir.utilities</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.utilities</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.r5</artifactId>
|
||||
<classifier>tests</classifier>
|
||||
<type>test-jar</type>
|
||||
<version>${project.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- FHIR Versions -->
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
|
@ -46,6 +64,11 @@
|
|||
<artifactId>org.hl7.fhir.r4</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.r5</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.convertors</artifactId>
|
||||
|
@ -197,7 +220,11 @@
|
|||
<artifactId>thymeleaf</artifactId>
|
||||
<version>3.0.9.RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>31.0.1-jre</version>
|
||||
</dependency>
|
||||
<!-- JUnit Jupiter -->
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
|
@ -205,12 +232,7 @@
|
|||
<version>${junit_jupiter_version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-params</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.vintage</groupId>
|
||||
<artifactId>junit-vintage-engine</artifactId>
|
||||
|
@ -223,6 +245,28 @@
|
|||
<optional>true</optional>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-engine</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-params</artifactId>
|
||||
<version>${junit_jupiter_version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.platform</groupId>
|
||||
<artifactId>junit-platform-launcher</artifactId>
|
||||
<version>${junit_platform_launcher_version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- End to end -->
|
||||
<dependency>
|
||||
<groupId>org.seleniumhq.selenium</groupId>
|
||||
|
|
|
@ -69,6 +69,8 @@ import org.hl7.fhir.validation.cli.model.CliContext;
|
|||
import org.hl7.fhir.validation.cli.services.ComparisonService;
|
||||
import org.hl7.fhir.validation.cli.services.ValidationService;
|
||||
import org.hl7.fhir.validation.cli.utils.*;
|
||||
import org.hl7.fhir.validation.testexecutor.TestExecutor;
|
||||
import org.hl7.fhir.validation.testexecutor.TestExecutorParams;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.Authenticator;
|
||||
|
@ -152,20 +154,36 @@ public class ValidatorCli {
|
|||
|
||||
CliContext cliContext = Params.loadCliContext(args);
|
||||
|
||||
if (Params.hasParam(args, Params.TEST)) {
|
||||
Common.runValidationEngineTests();
|
||||
} else if (shouldDisplayHelpToUser(args)) {
|
||||
if (shouldDisplayHelpToUser(args)) {
|
||||
Display.displayHelpDetails();
|
||||
} else if (Params.hasParam(args, Params.COMPARE)) {
|
||||
if (destinationDirectoryValid(Params.getParam(args, Params.DESTINATION))) {
|
||||
doLeftRightComparison(args, cliContext, tt);
|
||||
}
|
||||
} else {
|
||||
} else if (Params.hasParam(args, Params.TEST)) {
|
||||
parseTestParamsAndExecute(args);
|
||||
}
|
||||
else {
|
||||
Display.printCliArgumentsAndInfo(args);
|
||||
doValidation(tt, tts, cliContext);
|
||||
}
|
||||
}
|
||||
|
||||
protected static void parseTestParamsAndExecute(String[] args) {
|
||||
final String testModuleParam = Params.getParam(args, Params.TEST_MODULES);
|
||||
final String testClassnameFilter = Params.getParam(args, Params.TEST_NAME_FILTER);
|
||||
final String testCasesDirectory = Params.getParam(args, Params.TEST);
|
||||
final String txCacheDirectory = Params.getParam(args, Params.TERMINOLOGY_CACHE);
|
||||
assert TestExecutorParams.isValidModuleParam(testModuleParam) : "Invalid test module param: " + testModuleParam;
|
||||
final String[] moduleNamesArg = TestExecutorParams.parseModuleParam(testModuleParam);
|
||||
|
||||
assert TestExecutorParams.isValidClassnameFilterParam(testClassnameFilter) : "Invalid regex for test classname filter: " + testClassnameFilter;
|
||||
|
||||
new TestExecutor(moduleNamesArg).executeTests(testClassnameFilter, txCacheDirectory, testCasesDirectory);
|
||||
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
private static String[] preProcessArgs(String[] args) {
|
||||
// ips$branch --> -version 4.0 -ig hl7.fhir.uv.ips#current$connectathon-2 -profile http://hl7.org/fhir/uv/ips/StructureDefinition/Bundle-uv-ips
|
||||
List<String> res = new ArrayList<>();
|
||||
|
|
|
@ -66,18 +66,6 @@ public class Common {
|
|||
return defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Triggers the validation engine tests to run.
|
||||
*/
|
||||
public static void runValidationEngineTests() {
|
||||
try {
|
||||
Class<?> clazz = Class.forName("org.hl7.fhir.validation.r5.tests.ValidationEngineTests");
|
||||
clazz.getMethod("execute").invoke(clazz);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default validation engine will point to "http://tx.fhir.org" terminology server.
|
||||
*/
|
||||
|
|
|
@ -10,5 +10,6 @@ public enum EngineMode {
|
|||
CONVERT,
|
||||
SPREADSHEET,
|
||||
FHIRPATH,
|
||||
VERSION
|
||||
VERSION,
|
||||
RUN_TESTS
|
||||
}
|
||||
|
|
|
@ -70,6 +70,12 @@ public class Params {
|
|||
public static final String DO_IMPLICIT_FHIRPATH_STRING_CONVERSION = "-implicit-fhirpath-string-conversions";
|
||||
private static final Object JURISDICTION = "-jurisdiction";
|
||||
|
||||
public static final String RUN_TESTS = "-run-tests";
|
||||
|
||||
public static final String TEST_MODULES = "-test-modules";
|
||||
|
||||
public static final String TEST_NAME_FILTER = "-test-classname-filter";
|
||||
|
||||
/**
|
||||
* Checks the list of passed in params to see if it contains the passed in param.
|
||||
*
|
||||
|
@ -208,6 +214,9 @@ public class Params {
|
|||
cliContext.setMode(EngineMode.SPREADSHEET);
|
||||
} else if (args[i].equals(SNAPSHOT)) {
|
||||
cliContext.setMode(EngineMode.SNAPSHOT);
|
||||
} else if (args[i].equals(RUN_TESTS)) {
|
||||
// TODO setBaseTestingUtils test directory
|
||||
cliContext.setMode(EngineMode.RUN_TESTS);
|
||||
} else if (args[i].equals(SECURITY_CHECKS)) {
|
||||
cliContext.setSecurityChecks(true);
|
||||
} else if (args[i].equals(CRUMB_TRAIL)) {
|
||||
|
|
|
@ -0,0 +1,173 @@
|
|||
package org.hl7.fhir.validation.testexecutor;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.hl7.fhir.utilities.tests.TestConfig;
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestSummary;
|
||||
import org.hl7.fhir.utilities.tests.execution.junit4.JUnit4TestExecutor;
|
||||
import org.hl7.fhir.utilities.tests.execution.junit5.JUnit5ModuleTestExecutor;
|
||||
import org.hl7.fhir.utilities.tests.execution.ModuleTestExecutor;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.IOException;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.hl7.fhir.validation.testexecutor.TestModules.*;
|
||||
|
||||
public class TestExecutor {
|
||||
|
||||
|
||||
@Getter private final List<ModuleTestExecutor> jUnit4TestExecutors;
|
||||
|
||||
@Getter private final List<ModuleTestExecutor> jUnit5TestExecutors;
|
||||
|
||||
public TestExecutor(String[] moduleNamesArg) {
|
||||
this(getjUnit4TestExecutors(moduleNamesArg), getjUnit5TestExecutors(moduleNamesArg));
|
||||
}
|
||||
protected TestExecutor(List<ModuleTestExecutor> jUnit4TestExecutors, List<ModuleTestExecutor> jUnit5TestExecutors) {
|
||||
this.jUnit4TestExecutors = jUnit4TestExecutors;
|
||||
this.jUnit5TestExecutors = jUnit5TestExecutors;
|
||||
}
|
||||
|
||||
public static final String TX_CACHE = "txCache";
|
||||
|
||||
private static String SUMMARY_TEMPLATE = "Tests run: %d, Failures: %d, Errors: %d, Skipped: %d";
|
||||
private static final String DOT_PLACEHOLDER = new String(new char[53]).replace("\0", ".");
|
||||
|
||||
private static final int MAX_NAME_LENGTH = 50;
|
||||
|
||||
private String getModuleResultLine(String moduleName, CliTestSummary moduleTestSummary) {
|
||||
return getModuleNameAndSpacer(moduleName)
|
||||
+ " "
|
||||
+ getModuleResultString(moduleTestSummary);
|
||||
}
|
||||
|
||||
private String getModuleNameAndSpacer(String moduleName) {
|
||||
return moduleName.length() < MAX_NAME_LENGTH
|
||||
? moduleName + " " + DOT_PLACEHOLDER.substring(moduleName.length() + 1)
|
||||
: moduleName.substring(0, MAX_NAME_LENGTH) + "...";
|
||||
}
|
||||
|
||||
private String getModuleResultString(CliTestSummary cliTestSummary) {
|
||||
if (cliTestSummary.getTestsFoundCount() == 0) {
|
||||
return "NO TESTS";
|
||||
}
|
||||
|
||||
return cliTestSummary.getTestsFailedCount() == 0 && cliTestSummary.getTestsAbortedCount() == 0
|
||||
? "PASSED"
|
||||
: "FAILED";
|
||||
}
|
||||
|
||||
public static boolean pathExistsAsDirectory(String directoryPath) {
|
||||
Path path = Paths.get(directoryPath);
|
||||
return Files.exists(path)
|
||||
&& Files.isDirectory(path);
|
||||
}
|
||||
|
||||
public void executeTests(String classNameFilterArg, String txCacheDirectoryPath, String testCasesDirectoryPath) {
|
||||
|
||||
long start = System.currentTimeMillis();
|
||||
//Our lone JUnit 4 test.
|
||||
List<ModuleTestExecutor> jUnit4TestExecutors = getJUnit4TestExecutors();
|
||||
|
||||
TestConfig.getInstance().setRebuildCache(true);
|
||||
|
||||
setUpDirectories(txCacheDirectoryPath, testCasesDirectoryPath);
|
||||
|
||||
List<ModuleTestExecutor> jUnit5TestExecutors = getJUnit5TestExecutors();
|
||||
|
||||
long testsFoundCount = 0;
|
||||
long testsFailedCount = 0;
|
||||
long testsAbortedCount = 0;
|
||||
long testsSkippedCount = 0;
|
||||
|
||||
final Map<String, CliTestSummary> moduleResultMap = new HashMap<>();
|
||||
|
||||
final List<ModuleTestExecutor> orderedModuleTestExecutors = Stream.concat(jUnit5TestExecutors.stream(), jUnit4TestExecutors.stream()).collect(Collectors.toList());
|
||||
|
||||
for (ModuleTestExecutor moduleTestExecutor : orderedModuleTestExecutors) {
|
||||
final CliTestSummary testExecutionSummary = moduleTestExecutor.executeTests(System.out, classNameFilterArg);
|
||||
testsFoundCount += testExecutionSummary.getTestsFoundCount();
|
||||
testsFailedCount += testExecutionSummary.getTestsFailedCount();
|
||||
testsAbortedCount += testExecutionSummary.getTestsAbortedCount();
|
||||
testsSkippedCount += testExecutionSummary.getTestsSkippedCount();
|
||||
moduleResultMap.put(moduleTestExecutor.getModuleName(), testExecutionSummary);
|
||||
}
|
||||
|
||||
System.out.println("\n\nAll Tests completed.");
|
||||
|
||||
for (ModuleTestExecutor moduleTestExecutor : orderedModuleTestExecutors) {
|
||||
ModuleTestExecutor.printSummmary(System.out, moduleResultMap.get(moduleTestExecutor.getModuleName()), moduleTestExecutor.getModuleName());
|
||||
}
|
||||
|
||||
System.out.println("\nModule Results:\n");
|
||||
|
||||
for (ModuleTestExecutor moduleTestExecutor : orderedModuleTestExecutors) {
|
||||
System.out.println(getModuleResultLine(moduleTestExecutor.getModuleName(), moduleResultMap.get(moduleTestExecutor.getModuleName())));
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
System.out.println(String.format(SUMMARY_TEMPLATE, testsFoundCount, testsFailedCount, testsAbortedCount, testsSkippedCount));
|
||||
System.out.println("\nCompleted in " + (System.currentTimeMillis() - start) + "ms");
|
||||
|
||||
}
|
||||
|
||||
protected void setUpDirectories(String txCacheDirectoryPath, String testCasesDirectoryPath) {
|
||||
if (testCasesDirectoryPath != null
|
||||
&& pathExistsAsDirectory(testCasesDirectoryPath)
|
||||
) {
|
||||
TestConfig.getInstance().setFhirTestCasesDirectory(testCasesDirectoryPath);
|
||||
} else {
|
||||
throw new RuntimeException("fhir-test-cases directory does not exist: " + testCasesDirectoryPath);
|
||||
}
|
||||
try {
|
||||
String txCacheDirectory = getOrCreateTxCacheDirectory(txCacheDirectoryPath);
|
||||
if (!pathExistsAsDirectory(testCasesDirectoryPath)) {
|
||||
throw new RuntimeException("txCache directory does not exist: " + txCacheDirectory);
|
||||
}
|
||||
TestConfig.getInstance().setTxCacheDirectory(txCacheDirectory);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Unable to create temporary resource directory.", e);
|
||||
}
|
||||
}
|
||||
|
||||
private static String getOrCreateTxCacheDirectory(String txCacheDirectoryParam) throws IOException {
|
||||
final String txCacheDirectory;
|
||||
|
||||
if (txCacheDirectoryParam != null) {
|
||||
txCacheDirectory = txCacheDirectoryParam;
|
||||
} else {
|
||||
txCacheDirectory = Files.createTempDirectory("validator-test-tx-cache").toFile().getAbsolutePath();
|
||||
TxCacheResourceExtractor.extractTxCacheResources(txCacheDirectory);
|
||||
}
|
||||
|
||||
return txCacheDirectory;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public static List<ModuleTestExecutor> getjUnit5TestExecutors(String[] moduleNamesArg) {
|
||||
final String[] moduleNames = moduleNamesArg == null ? JUNIT5_MODULE_NAMES : moduleNamesArg;
|
||||
return Arrays.stream(moduleNames)
|
||||
.map(moduleName -> JUnit5ModuleTestExecutor.getStandardModuleTestExecutor(moduleName))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public static List<ModuleTestExecutor> getjUnit4TestExecutors(String[] moduleNamesArg) {
|
||||
|
||||
final List<ModuleTestExecutor> jUnit4TestExecutors = Arrays.asList(new JUnit4TestExecutor(VALIDATION_MODULE, JUNIT4_CLASSNAMES));
|
||||
|
||||
if (moduleNamesArg == null) {
|
||||
return jUnit4TestExecutors;
|
||||
}
|
||||
|
||||
return Arrays.stream(moduleNamesArg).anyMatch(moduleName -> VALIDATION_MODULE.equals(moduleName))
|
||||
? jUnit4TestExecutors
|
||||
: Arrays.asList();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package org.hl7.fhir.validation.testexecutor;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.regex.PatternSyntaxException;
|
||||
|
||||
import static org.hl7.fhir.validation.testexecutor.TestModules.JUNIT5_MODULE_NAMES;
|
||||
|
||||
public class TestExecutorParams {
|
||||
private static final String MODULE_DELIMITER = ",";
|
||||
public static boolean isValidModuleParam(String param) {
|
||||
if (param == null) {
|
||||
return true;
|
||||
}
|
||||
final String[] modules = param.split(MODULE_DELIMITER);
|
||||
for (String module : modules) {
|
||||
if (Arrays.stream(JUNIT5_MODULE_NAMES).noneMatch(i -> i.equals(module))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static String[] parseModuleParam(String param) {
|
||||
if (param == null) {
|
||||
return null;
|
||||
} else {
|
||||
return param.split(MODULE_DELIMITER);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isValidClassnameFilterParam(String param) {
|
||||
try {
|
||||
Pattern.compile(param);
|
||||
return true;
|
||||
} catch (PatternSyntaxException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package org.hl7.fhir.validation.testexecutor;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class TestModules {
|
||||
public static final String VALIDATION_MODULE = "org.hl7.fhir.validation";
|
||||
public static final String[] JUNIT5_MODULE_NAMES = {
|
||||
"org.hl7.fhir.utilities",
|
||||
"org.hl7.fhir.convertors",
|
||||
"org.hl7.fhir.dstu2",
|
||||
"org.hl7.fhir.dstu2016may",
|
||||
"org.hl7.fhir.dstu3",
|
||||
"org.hl7.fhir.r4",
|
||||
"org.hl7.fhir.r4b",
|
||||
"org.hl7.fhir.r5",
|
||||
VALIDATION_MODULE
|
||||
};
|
||||
|
||||
public static final List<String> JUNIT4_CLASSNAMES = Arrays.asList("org.hl7.fhir.validation.tests.ValidationTests");
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
package org.hl7.fhir.validation.testexecutor;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
||||
public class TxCacheResourceExtractor {
|
||||
public static void extractTxCacheResources(String targetDirectory) throws IOException {
|
||||
Path targetPath = Paths.get(targetDirectory);
|
||||
|
||||
URL jar = TestExecutor.class.getProtectionDomain().getCodeSource().getLocation();
|
||||
ZipInputStream zip = new ZipInputStream(jar.openStream());
|
||||
while(true) {
|
||||
ZipEntry e = zip.getNextEntry();
|
||||
if (e == null)
|
||||
break;
|
||||
processZipEntry(zip, targetPath, e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void processZipEntry(ZipInputStream zip, Path targetPath, ZipEntry e) throws IOException {
|
||||
String name = e.getName();
|
||||
if (!name.startsWith(TestExecutor.TX_CACHE)) {
|
||||
zip.closeEntry();
|
||||
return;
|
||||
}
|
||||
|
||||
Path sourcePath = Paths.get(name);
|
||||
if (sourcePath.getNameCount() <= 1) {
|
||||
zip.closeEntry();
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.isDirectory()) {
|
||||
zip.closeEntry();
|
||||
return;
|
||||
}
|
||||
extractFileFromZipInputStream(zip, sourcePath, targetPath);
|
||||
}
|
||||
|
||||
private static void extractFileFromZipInputStream(ZipInputStream zip, Path sourcePath, Path targetPath) throws IOException {
|
||||
Path fileTargetPath = targetPath.resolve(sourcePath.subpath(1, sourcePath.getNameCount()));
|
||||
|
||||
makeFileParentDirsIfNotExist(fileTargetPath);
|
||||
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(fileTargetPath.toFile());
|
||||
for (int c = zip.read(); c != -1; c = zip.read()) {
|
||||
fileOutputStream.write(c);
|
||||
}
|
||||
zip.closeEntry();
|
||||
fileOutputStream.close();
|
||||
}
|
||||
|
||||
private static void makeFileParentDirsIfNotExist(Path filePath) {
|
||||
Path parent = filePath.getParent();
|
||||
if (!parent.toFile().exists()) {
|
||||
parent.toFile().mkdirs();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,28 +1,23 @@
|
|||
package org.hl7.fhir.validation.cli.services;
|
||||
|
||||
import org.apache.commons.io.Charsets;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.hl7.fhir.r5.elementmodel.Manager;
|
||||
import org.hl7.fhir.validation.ValidationEngine;
|
||||
import org.hl7.fhir.validation.cli.model.CliContext;
|
||||
import org.hl7.fhir.validation.cli.model.FileInfo;
|
||||
import org.hl7.fhir.validation.cli.model.ValidationRequest;
|
||||
import org.hl7.fhir.validation.tests.utilities.TestConstants;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentMatchers;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.hl7.fhir.validation.tests.utilities.TestUtilities.getTerminologyCacheDirectory;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class ValidationServiceTest {
|
||||
|
@ -36,7 +31,7 @@ class ValidationServiceTest {
|
|||
List<FileInfo> filesToValidate = new ArrayList<>();
|
||||
filesToValidate.add(new FileInfo().setFileName("test_resource.json").setFileContent(resource).setFileType(Manager.FhirFormat.JSON.getExtension()));
|
||||
|
||||
ValidationRequest request = new ValidationRequest().setCliContext(new CliContext().setTxCache(Paths.get(TestConstants.TX_CACHE, "validationService").toString())).setFilesToValidate(filesToValidate);
|
||||
ValidationRequest request = new ValidationRequest().setCliContext(new CliContext().setTxCache(getTerminologyCacheDirectory("validationService"))).setFilesToValidate(filesToValidate);
|
||||
// Validation run 1...nothing cached yet
|
||||
myService.validateSources(request);
|
||||
Mockito.verify(sessionCache, Mockito.times(1)).cacheSession(ArgumentMatchers.any(ValidationEngine.class));
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
package org.hl7.fhir.validation.testexecutor;
|
||||
|
||||
import org.hl7.fhir.utilities.tests.execution.CliTestSummary;
|
||||
import org.hl7.fhir.utilities.tests.execution.ModuleTestExecutor;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
public class TestExecutorTests {
|
||||
|
||||
private static ModuleTestExecutor mockModuleTestExecutor(String moduleName) {
|
||||
ModuleTestExecutor moduleTestExecutor = mock(ModuleTestExecutor.class);
|
||||
doReturn(moduleName).when(moduleTestExecutor).getModuleName();
|
||||
CliTestSummary testSummary = mock(CliTestSummary.class);
|
||||
doReturn(testSummary).when(moduleTestExecutor).executeTests(any(), any());
|
||||
return moduleTestExecutor;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTestExecutor() {
|
||||
|
||||
ModuleTestExecutor junit4TestExecutor = mockModuleTestExecutor("dummy.junit4");
|
||||
|
||||
List<ModuleTestExecutor> junit4TestExecutors = Arrays.asList(
|
||||
junit4TestExecutor
|
||||
);
|
||||
|
||||
ModuleTestExecutor junit5TestExecutor = mockModuleTestExecutor("dummy.junit5");
|
||||
|
||||
List<ModuleTestExecutor> junit5TestExecutors = Arrays.asList(
|
||||
junit5TestExecutor
|
||||
);
|
||||
|
||||
TestExecutor testExecutor = Mockito.spy(new TestExecutor(junit4TestExecutors, junit5TestExecutors));
|
||||
|
||||
final String txCacheDirectoryPath = "dummyTxCacheDirectoryPath";
|
||||
|
||||
final String testCasesDirectoryPath = System.getProperty("user.dir");
|
||||
|
||||
doNothing().when(testExecutor).setUpDirectories(txCacheDirectoryPath, testCasesDirectoryPath);
|
||||
|
||||
testExecutor.executeTests(null, txCacheDirectoryPath, testCasesDirectoryPath);
|
||||
|
||||
verify(testExecutor).getJUnit4TestExecutors();
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package org.hl7.fhir.validation.testexecutor;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
public class TxCacheResourceExtractorTest {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return true if the TestConstants.getTxCacheDirectory() is not set to the default value
|
||||
*/
|
||||
public static final boolean isCliRun() {
|
||||
return !org.hl7.fhir.r5.test.utils.TestConstants.TX_CACHE.equals(org.hl7.fhir.utilities.tests.TestConfig.getInstance().getTxCacheDirectory());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTxCacheExtraction() throws IOException {
|
||||
if (isCliRun()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Path path = Files.createTempDirectory("txCacheExtractionTest");
|
||||
|
||||
TxCacheResourceExtractor.extractTxCacheResources(path.toString());
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -7,7 +7,8 @@ import org.hl7.fhir.utilities.TextFile;
|
|||
import org.hl7.fhir.utilities.VersionUtilities;
|
||||
import org.hl7.fhir.validation.IgLoader;
|
||||
import org.hl7.fhir.validation.ValidationEngine;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
|
||||
public class LoadIgTests {
|
||||
|
||||
|
|
|
@ -3,10 +3,9 @@ package org.hl7.fhir.validation.tests;
|
|||
import org.hl7.fhir.r5.elementmodel.Manager.FhirFormat;
|
||||
import org.hl7.fhir.r5.test.utils.TestingUtilities;
|
||||
import org.hl7.fhir.validation.NativeHostServices;
|
||||
import org.hl7.fhir.validation.tests.utilities.TestConstants;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
import static org.hl7.fhir.validation.tests.utilities.TestUtilities.getTerminologyCacheDirectory;
|
||||
|
||||
public class NativeHostServiceTester {
|
||||
|
||||
|
@ -16,7 +15,7 @@ public class NativeHostServiceTester {
|
|||
|
||||
NativeHostServices svc = new NativeHostServices();
|
||||
svc.init("hl7.fhir.r4.core#4.0.1");
|
||||
svc.connectToTxSvc("http://tx.fhir.org/r4", null, Paths.get(TestConstants.TX_CACHE, "nativeHost").toString());
|
||||
svc.connectToTxSvc("http://tx.fhir.org/r4", null, getTerminologyCacheDirectory("nativeHost").toString());
|
||||
System.out.println("base: "+svc.status());
|
||||
|
||||
svc.seeResource(TestingUtilities.loadTestResourceBytes("validator", "misc", "ValueSet-dicm-2-AnatomicModifier.json"), FhirFormat.JSON);
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.List;
|
|||
|
||||
import org.hl7.fhir.utilities.FhirPublication;
|
||||
import org.hl7.fhir.utilities.tests.CacheVerificationLogger;
|
||||
import org.hl7.fhir.validation.tests.utilities.TestConstants;
|
||||
import org.hl7.fhir.r5.elementmodel.Manager.FhirFormat;
|
||||
import org.hl7.fhir.r5.model.OperationOutcome;
|
||||
import org.hl7.fhir.r5.model.OperationOutcome.IssueSeverity;
|
||||
|
|
|
@ -2,6 +2,8 @@ package org.hl7.fhir.validation.tests.utilities;
|
|||
|
||||
import org.hl7.fhir.r5.context.TerminologyCache;
|
||||
import org.hl7.fhir.utilities.FhirPublication;
|
||||
import org.hl7.fhir.utilities.tests.TestConfig;
|
||||
import org.hl7.fhir.utilities.tests.TestConstants;
|
||||
import org.hl7.fhir.validation.ValidationEngine;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
|
@ -16,7 +18,7 @@ public class TestUtilities {
|
|||
.withCanRunWithoutTerminologyServer(canRunWithoutTerminologyServer)
|
||||
.withVersion(vString)
|
||||
.withUserAgent(TestConstants.USER_AGENT)
|
||||
.withTerminologyCachePath(Paths.get(TestConstants.TX_CACHE, vString).toString())
|
||||
.withTerminologyCachePath(getTerminologyCacheDirectory(vString))
|
||||
.withTxServer(txServer, txLog, version)
|
||||
.fromSource(src);
|
||||
|
||||
|
@ -24,11 +26,15 @@ public class TestUtilities {
|
|||
return validationEngine;
|
||||
}
|
||||
|
||||
public static String getTerminologyCacheDirectory(String ... testSetPath) {
|
||||
return Paths.get(TestConfig.getInstance().getTxCacheDirectory("org.hl7.fhir.validation"), testSetPath).toString();
|
||||
}
|
||||
|
||||
public static ValidationEngine getValidationEngine(java.lang.String src, java.lang.String txServer, FhirPublication version, java.lang.String vString) throws Exception {
|
||||
final ValidationEngine validationEngine = new ValidationEngine.ValidationEngineBuilder()
|
||||
.withVersion(vString)
|
||||
.withUserAgent(TestConstants.USER_AGENT)
|
||||
.withTerminologyCachePath(Paths.get(TestConstants.TX_CACHE, vString).toString())
|
||||
.withTerminologyCachePath(getTerminologyCacheDirectory(vString))
|
||||
.withTxServer(txServer, TestConstants.TX_CACHE_LOG, version)
|
||||
.fromSource(src);
|
||||
TerminologyCache.setCacheErrors(true);
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://medcomfhir.dk/fhir/core/1.0/CodeSystem/medcom-messaging-activityCodes",
|
||||
"code" : "new-message"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"true"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The code system 'http://medcomfhir.dk/fhir/core/1.0/CodeSystem/medcom-messaging-activityCodes' is not known (encountered paired with code = 'new-message'); The code provided (http://medcomfhir.dk/fhir/core/1.0/CodeSystem/medcom-messaging-activityCodes#new-message) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)",
|
||||
"class" : "CODESYSTEM_UNSUPPORTED"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -1,22 +0,0 @@
|
|||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/security-source-type",
|
||||
"code" : "4",
|
||||
"display" : "Application Server"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Application Server",
|
||||
"code" : "4",
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/security-source-type"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/security-source-type",
|
||||
"code" : "4"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/audit-source-type--0", "version": "4.5.0", "lang":"null", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Application Server",
|
||||
"code" : "4",
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/security-source-type"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -1,11 +0,0 @@
|
|||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason",
|
||||
"code" : "HTEST"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "test health data",
|
||||
"code" : "HTEST",
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-ActReason"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -1,21 +0,0 @@
|
|||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType",
|
||||
"code" : "IRCP"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/participation-role-type--5", "version": "4.5.0", "lang":"null", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "information recipient",
|
||||
"code" : "IRCP",
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType",
|
||||
"code" : "IRCP"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "information recipient",
|
||||
"code" : "IRCP",
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -1,21 +0,0 @@
|
|||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-RoleClass",
|
||||
"code" : "PROV"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/participation-role-type--1", "version": "4.5.0", "lang":"null", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "healthcare provider",
|
||||
"code" : "PROV",
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-RoleClass"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-RoleClass",
|
||||
"code" : "PROV"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "healthcare provider",
|
||||
"code" : "PROV",
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/v3-RoleClass"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -12,11 +12,11 @@
|
|||
"url" : "http://hl7.org/fhir/3.0/StructureDefinition/extension-CapabilityStatement.acceptUnknown",
|
||||
"valueCode" : "both"
|
||||
}],
|
||||
"url" : "http://fhir.healthintersections.com.au/open/metadata",
|
||||
"version" : "1.0.2-2.0.12-SNAPSHOT",
|
||||
"url" : "http://tx.fhir.org/r2/metadata",
|
||||
"version" : "1.0.2-2.0.14",
|
||||
"name" : "FHIR Reference Server Conformance Statement",
|
||||
"status" : "active",
|
||||
"date" : "2022-01-06T15:44:28.286Z",
|
||||
"date" : "2022-06-09T21:15:44.743Z",
|
||||
"contact" : [{
|
||||
"telecom" : [{
|
||||
"system" : "other",
|
||||
|
@ -27,8 +27,12 @@
|
|||
"kind" : "instance",
|
||||
"software" : {
|
||||
"name" : "Reference Server",
|
||||
"version" : "2.0.12-SNAPSHOT",
|
||||
"releaseDate" : "2021-12-20T02:28:03.769Z"
|
||||
"version" : "2.0.14",
|
||||
"releaseDate" : "2022-05-13T19:50:55.040Z"
|
||||
},
|
||||
"implementation" : {
|
||||
"description" : "FHIR Server running at http://tx.fhir.org/r2",
|
||||
"url" : "http://tx.fhir.org/r2"
|
||||
},
|
||||
"fhirVersion" : "1.0.2",
|
||||
"format" : ["application/xml+fhir",
|
|
@ -12,11 +12,11 @@
|
|||
"url" : "http://hl7.org/fhir/3.0/StructureDefinition/extension-CapabilityStatement.acceptUnknown",
|
||||
"valueCode" : "both"
|
||||
}],
|
||||
"url" : "http://fhir.healthintersections.com.au/open/metadata",
|
||||
"version" : "3.0.2-2.0.12-SNAPSHOT",
|
||||
"url" : "http://tx.fhir.org/r3/metadata",
|
||||
"version" : "3.0.2-2.0.14",
|
||||
"name" : "FHIR Reference Server Conformance Statement",
|
||||
"status" : "active",
|
||||
"date" : "2022-01-10T11:02:52.097Z",
|
||||
"date" : "2022-06-09T21:14:05.196Z",
|
||||
"contact" : [{
|
||||
"telecom" : [{
|
||||
"system" : "other",
|
||||
|
@ -27,8 +27,12 @@
|
|||
"instantiates" : ["http://hl7.org/fhir/CapabilityStatement/terminology-server"],
|
||||
"software" : {
|
||||
"name" : "Reference Server",
|
||||
"version" : "2.0.12-SNAPSHOT",
|
||||
"releaseDate" : "2021-12-20T02:28:03.769Z"
|
||||
"version" : "2.0.14",
|
||||
"releaseDate" : "2022-05-13T19:50:55.040Z"
|
||||
},
|
||||
"implementation" : {
|
||||
"description" : "FHIR Server running at http://tx.fhir.org/r3",
|
||||
"url" : "http://tx.fhir.org/r3"
|
||||
},
|
||||
"fhirVersion" : "3.0.2",
|
||||
"format" : ["application/fhir+xml",
|
||||
|
@ -60,7 +64,7 @@
|
|||
},
|
||||
{
|
||||
"name" : "versions",
|
||||
"definition" : "/OperationDefinition/fso-versions"
|
||||
"definition" : "http://tx.fhir.org/r3/OperationDefinition/fso-versions"
|
||||
}]
|
||||
}]
|
||||
}
|
|
@ -12,11 +12,11 @@
|
|||
"url" : "http://hl7.org/fhir/3.0/StructureDefinition/extension-CapabilityStatement.acceptUnknown",
|
||||
"valueCode" : "both"
|
||||
}],
|
||||
"url" : "http://fhir.healthintersections.com.au/open/metadata",
|
||||
"version" : "3.0.2-2.0.12-SNAPSHOT",
|
||||
"url" : "http://tx.fhir.org/r3/metadata",
|
||||
"version" : "3.0.2-2.0.14",
|
||||
"name" : "FHIR Reference Server Conformance Statement",
|
||||
"status" : "active",
|
||||
"date" : "2022-01-10T11:02:52.097Z",
|
||||
"date" : "2022-06-09T21:13:00.228Z",
|
||||
"contact" : [{
|
||||
"telecom" : [{
|
||||
"system" : "other",
|
||||
|
@ -27,8 +27,12 @@
|
|||
"instantiates" : ["http://hl7.org/fhir/CapabilityStatement/terminology-server"],
|
||||
"software" : {
|
||||
"name" : "Reference Server",
|
||||
"version" : "2.0.12-SNAPSHOT",
|
||||
"releaseDate" : "2021-12-20T02:28:03.769Z"
|
||||
"version" : "2.0.14",
|
||||
"releaseDate" : "2022-05-13T19:50:55.040Z"
|
||||
},
|
||||
"implementation" : {
|
||||
"description" : "FHIR Server running at http://tx.fhir.org/r3",
|
||||
"url" : "http://tx.fhir.org/r3"
|
||||
},
|
||||
"fhirVersion" : "3.0.2",
|
||||
"format" : ["application/fhir+xml",
|
||||
|
@ -60,7 +64,7 @@
|
|||
},
|
||||
{
|
||||
"name" : "versions",
|
||||
"definition" : "/OperationDefinition/fso-versions"
|
||||
"definition" : "http://tx.fhir.org/r3/OperationDefinition/fso-versions"
|
||||
}]
|
||||
}]
|
||||
}
|
|
@ -155,7 +155,7 @@ v: {
|
|||
"code" : "48765-2",
|
||||
"system" : "http://loinc.org",
|
||||
"severity" : "warning",
|
||||
"error" : "The display \"Allergies\" is not a valid display for the code {http://loinc.org}48765-2 - should be one of ['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), '' (zh-CN), 'Allergie e reazioni avverse Documentazione miscellanea Miscellanea Osservazione paziente Punto nel tempo (episodio)' (it-IT), 'Документ Точка во времени' (ru-RU), 'Момент' (ru-RU)] (from http://tx.fhir.org/r3)"
|
||||
"error" : "The display \"Allergies\" is not a valid display for the code {http://loinc.org}48765-2 - should be one of ['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), 'Момент' (ru-RU)] (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -245,7 +245,7 @@ v: {
|
|||
"code" : "18776-5",
|
||||
"system" : "http://loinc.org",
|
||||
"severity" : "warning",
|
||||
"error" : "The display \"Plan of care\" is not a valid display for the code {http://loinc.org}18776-5 - should be one of ['Plan of care note', 'Plan of care note', '临床文档型' (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), '证明书' (zh-CN), '' (zh-CN), 'Documentazione dell''ontologia Osservazione Piano di cura Punto nel tempo (episodio) Ruolo non specificato' (it-IT)] (from http://tx.fhir.org/r3)"
|
||||
"error" : "The display \"Plan of care\" is not a valid display for the code {http://loinc.org}18776-5 - should be one of ['Plan of care note', 'Plan of care note', '', '临床文档型' (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), '证明书' (zh-CN), 'Documentazione dell''ontologia Osservazione Piano di cura Punto nel tempo (episodio) Ruolo non specificato' (it-IT)] (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -280,7 +280,7 @@ v: {
|
|||
"code" : "10187-3",
|
||||
"system" : "http://loinc.org",
|
||||
"severity" : "warning",
|
||||
"error" : "The display \"Review of systems Narrative Reporte\" is not a valid display for the code {http://loinc.org}10187-3 - should be one of ['Review of systems Narrative - Reported', 'Review of systems', '医疗服务对象' (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), '报告' (zh-CN), '报告型' (zh-CN), '文字叙述' (zh-CN), '文本叙述型' (zh-CN), '文本描述' (zh-CN), '文本描述型 时刻' (zh-CN), '随机' (zh-CN), '随意' (zh-CN), '瞬间 病史与体格检查 系统回顾' (zh-CN), '系统审核' (zh-CN), '' (zh-CN), 'Anamnesi Osservazione paziente Punto nel tempo (episodio)' (it-IT), 'Анамнестические сведения' (ru-RU), 'Сообщенная третьим лицом информация Описательный Точка во времени' (ru-RU), 'Момент' (ru-RU)] (from http://tx.fhir.org/r3)"
|
||||
"error" : "The display \"Review of systems Narrative Reporte\" is not a valid display for the code {http://loinc.org}10187-3 - should be one of ['Review of systems Narrative - Reported', 'Review of systems', '', '医疗服务对象' (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), '报告型' (zh-CN), '文字叙述' (zh-CN), '文本叙述型' (zh-CN), '文本描述' (zh-CN), '文本描述型 时刻' (zh-CN), '随机' (zh-CN), '随意' (zh-CN), '瞬间 病史与体格检查 系统回顾' (zh-CN), '系统审核' (zh-CN), 'Anamnesi Osservazione paziente Punto nel tempo (episodio)' (it-IT), 'Анамнестические сведения' (ru-RU), 'Сообщенная третьим лицом информация Описательный Точка во времени' (ru-RU), 'Момент' (ru-RU)] (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
|
@ -130,7 +130,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 823681000000100 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"823681000000100\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#823681000000100) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 823681000000100 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"823681000000100\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#823681000000100) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -140,7 +140,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 886921000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"886921000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#886921000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 886921000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"886921000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#886921000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -150,7 +150,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 1077881000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"1077881000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#1077881000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 1077881000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"1077881000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#1077881000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -160,7 +160,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 887181000000106 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"887181000000106\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887181000000106) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 887181000000106 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"887181000000106\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887181000000106) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -170,7 +170,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 887161000000102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"887161000000102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887161000000102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 887161000000102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"887161000000102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887161000000102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -180,7 +180,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 1052891000000108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"1052891000000108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#1052891000000108) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 1052891000000108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"1052891000000108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#1052891000000108) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -190,7 +190,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 715851000000102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"715851000000102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#715851000000102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 715851000000102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"715851000000102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#715851000000102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -200,7 +200,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 717121000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"717121000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#717121000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 717121000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"717121000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#717121000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -210,7 +210,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 933361000000108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"933361000000108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#933361000000108) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 933361000000108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"933361000000108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#933361000000108) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -220,7 +220,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 887171000000109 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"887171000000109\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887171000000109) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 887171000000109 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"887171000000109\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887171000000109) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -230,7 +230,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 887201000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"887201000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887201000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 887201000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"887201000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887201000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -240,7 +240,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 1052951000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"1052951000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#1052951000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 1052951000000105 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"1052951000000105\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#1052951000000105) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -250,7 +250,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 886731000000109 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"886731000000109\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#886731000000109) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 886731000000109 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"886731000000109\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#886731000000109) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -260,7 +260,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 887231000000104 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"887231000000104\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887231000000104) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 887231000000104 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"887231000000104\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#887231000000104) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -270,7 +270,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 9290701000001101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"9290701000001101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#9290701000001101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
"error" : "Unable to find code 9290701000001101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"9290701000001101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#9290701000001101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -332,6 +332,15 @@ v: {
|
|||
"system" : "http://snomed.info/sct"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "11181000146103"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 11181000146103 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"11181000146103\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#11181000146103) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "27113001",
|
||||
|
@ -343,12 +352,3 @@ v: {
|
|||
"system" : "http://snomed.info/sct"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "11181000146103"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 11181000146103 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"11181000146103\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#11181000146103) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r3)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -8,11 +8,11 @@
|
|||
"display" : "Subsetted"
|
||||
}]
|
||||
},
|
||||
"url" : "http://fhir.healthintersections.com.au/open/metadata",
|
||||
"version" : "4.0.1-2.0.12-SNAPSHOT",
|
||||
"url" : "http://tx.fhir.org/r4/metadata",
|
||||
"version" : "4.0.1-2.0.14",
|
||||
"name" : "FHIR Reference Server Conformance Statement",
|
||||
"status" : "active",
|
||||
"date" : "2022-01-10T11:07:19.254Z",
|
||||
"date" : "2022-06-09T21:09:34.321Z",
|
||||
"contact" : [{
|
||||
"telecom" : [{
|
||||
"system" : "other",
|
||||
|
@ -23,8 +23,12 @@
|
|||
"instantiates" : ["http://hl7.org/fhir/CapabilityStatement/terminology-server"],
|
||||
"software" : {
|
||||
"name" : "Reference Server",
|
||||
"version" : "2.0.12-SNAPSHOT",
|
||||
"releaseDate" : "2021-12-20T02:28:03.769Z"
|
||||
"version" : "2.0.14",
|
||||
"releaseDate" : "2022-05-13T19:50:55.040Z"
|
||||
},
|
||||
"implementation" : {
|
||||
"description" : "FHIR Server running at http://tx.fhir.org/r4",
|
||||
"url" : "http://tx.fhir.org/r4"
|
||||
},
|
||||
"fhirVersion" : "4.0.1",
|
||||
"format" : ["application/fhir+xml",
|
||||
|
@ -56,7 +60,7 @@
|
|||
},
|
||||
{
|
||||
"name" : "versions",
|
||||
"definition" : "/OperationDefinition/fso-versions"
|
||||
"definition" : "http://tx.fhir.org/r4/OperationDefinition/fso-versions"
|
||||
}]
|
||||
}]
|
||||
}
|
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"resourceType" : "TerminologyCapabilities",
|
||||
"id" : "FhirServer",
|
||||
"url" : "http://fhir.healthintersections.com.au/open/metadata",
|
||||
"url" : "http://tx.fhir.org/r4/metadata",
|
||||
"version" : "1.0.0",
|
||||
"name" : "FHIR Reference Server Teminology Capability Statement",
|
||||
"status" : "active",
|
||||
"date" : "2022-01-07T08:11:26.721Z",
|
||||
"date" : "2022-06-09T11:12:53.805Z",
|
||||
"contact" : [{
|
||||
"telecom" : [{
|
||||
"system" : "other",
|
||||
|
@ -832,9 +832,15 @@
|
|||
{
|
||||
"uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-documentreference-category"
|
||||
},
|
||||
{
|
||||
"uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-observation-category"
|
||||
},
|
||||
{
|
||||
"uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-provenance-participant-type"
|
||||
},
|
||||
{
|
||||
"uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-tags"
|
||||
},
|
||||
{
|
||||
"uri" : "http://hl7.org/fhir/variable-type"
|
||||
},
|
|
@ -36,7 +36,7 @@ v: {
|
|||
"code" : "59284-0",
|
||||
"system" : "http://loinc.org",
|
||||
"severity" : "warning",
|
||||
"error" : "The display \"Patient Authorization Signature\" is not a valid display for the code {http://loinc.org}59284-0 - should be one of ['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), 'Documentazione dell''ontologia Osservazione Punto nel tempo (episodio)' (it-IT), '' (it-IT)] (from http://tx.fhir.org/r4)"
|
||||
"error" : "The display \"Patient Authorization Signature\" is not a valid display for the code {http://loinc.org}59284-0 - should be one of ['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), 'Documentazione dell''ontologia Osservazione Punto nel tempo (episodio)' (it-IT)] (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -153,6 +153,15 @@ v: {
|
|||
"system" : "urn:ietf:bcp:47"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"code" : "application/xml"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/mimetypes", "version": "4.0.1", "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"true", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "application/xml",
|
||||
"code" : "application/xml",
|
||||
"system" : "urn:ietf:bcp:13"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"code" : "text/xml"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/mimetypes", "version": "4.0.1", "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"true", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
|
@ -828,7 +837,7 @@ v: {
|
|||
}, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 10821000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"10821000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10821000202101) is not valid in the value set 'no-colonoscopy-sedation-level' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 10821000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"10821000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10821000202101) is not valid in the value set 'no-colonoscopy-sedation-level' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1533,78 +1542,3 @@ v: {
|
|||
"system" : "urn:iso:std:iso:3166"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "10821000202101",
|
||||
"display" : "Narkose eller dyp sedasjon med anestesistøtte"
|
||||
}, "valueSet" :{
|
||||
"resourceType" : "ValueSet",
|
||||
"compose" : {
|
||||
"include" : [{
|
||||
"system" : "http://snomed.info/sct",
|
||||
"concept" : [{
|
||||
"code" : "10821000202101",
|
||||
"display" : "Narkose eller dyp sedasjon med anestesistøtte",
|
||||
"designation" : [{
|
||||
"language" : "no",
|
||||
"use" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "900000000000003001",
|
||||
"display" : "Fully specified name"
|
||||
},
|
||||
"value" : "Narkose eller dyp sedasjon med anestesistøtte"
|
||||
}]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/special-values",
|
||||
"concept" : [{
|
||||
"code" : "nil-known",
|
||||
"display" : "Ingen",
|
||||
"designation" : [{
|
||||
"language" : "en",
|
||||
"use" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "900000000000003001",
|
||||
"display" : "Fully specified name"
|
||||
},
|
||||
"value" : "Nil Known"
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
},
|
||||
"expansion" : {
|
||||
"contains" : [{
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "10821000202101",
|
||||
"display" : "Narkose eller dyp sedasjon med anestesistøtte"
|
||||
},
|
||||
{
|
||||
"system" : "http://terminology.hl7.org/CodeSystem/special-values",
|
||||
"code" : "nil-known",
|
||||
"display" : "Ingen"
|
||||
}]
|
||||
}
|
||||
}, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 10821000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"10821000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10821000202101) is not valid in the value set 'no-colonoscopy-sedation-level' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"code" : "pdf"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/mimetypes", "version": "4.0.1", "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"true", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "The code \"pdf\" is not valid in the system urn:ietf:bcp:13; The code provided (urn:ietf:bcp:13#pdf) is not valid in the value set 'Mime Types' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"code" : "application/xml"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/mimetypes", "version": "4.0.1", "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"true", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "application/xml",
|
||||
"code" : "application/xml",
|
||||
"system" : "urn:ietf:bcp:13"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -9,6 +9,46 @@ v: {
|
|||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "11502-2"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/doc-typecodes--0", "version": "4.0.1", "lang":"null", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Laboratory report",
|
||||
"code" : "11502-2",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "11502-2"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/doc-typecodes", "version": "4.0.1", "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Laboratory report",
|
||||
"code" : "11502-2",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "11502-2"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"true"}####
|
||||
v: {
|
||||
"display" : "Laboratory report",
|
||||
"code" : "11502-2",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "11502-2"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Laboratory report",
|
||||
"code" : "11502-2",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "60591-5"
|
||||
|
@ -290,7 +330,7 @@ v: {
|
|||
"code" : "51726-8",
|
||||
"system" : "http://loinc.org",
|
||||
"severity" : "warning",
|
||||
"error" : "The display \"NDC labeler code request\" is not a valid display for the code {http://loinc.org}51726-8 - should be one of ['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), 'Описательный' (ru-RU)] (from http://tx.fhir.org/r4)"
|
||||
"error" : "The display \"NDC labeler code request\" is not a valid display for the code {http://loinc.org}51726-8 - should be one of ['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), 'Описательный' (ru-RU)] (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -365,7 +405,7 @@ v: {
|
|||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.71",
|
||||
"version" : "2.72",
|
||||
"code" : "57852-6",
|
||||
"display" : "Problem list Narrative - Reported"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
|
@ -1278,7 +1318,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Version 'http://loinc.org' of the code system 'http://loinc.org' is not known (encountered paired with code = 'test'). ValidVersions = [2.71]; The code provided (http://loinc.org#test) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)",
|
||||
"error" : "Version 'http://loinc.org' of the code system 'http://loinc.org' is not known (encountered paired with code = 'test'). ValidVersions = [2.72]; The code provided (http://loinc.org#test) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)",
|
||||
"class" : "CODESYSTEM_UNSUPPORTED"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
|
@ -1292,55 +1332,3 @@ v: {
|
|||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "11502-2"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/doc-typecodes--0", "version": "4.0.1", "lang":"null", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Laboratory report",
|
||||
"code" : "11502-2",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "11502-2"
|
||||
}, "url": "http://hl7.org/fhir/ValueSet/doc-typecodes", "version": "4.0.1", "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Laboratory report",
|
||||
"code" : "11502-2",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "11502-2"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"true"}####
|
||||
v: {
|
||||
"display" : "Laboratory report",
|
||||
"code" : "11502-2",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"code" : "11502-2"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Laboratory report",
|
||||
"code" : "11502-2",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://loinc.org",
|
||||
"version" : "2.72",
|
||||
"code" : "57852-6",
|
||||
"display" : "Problem list Narrative - Reported"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Problem list Narrative - Reported",
|
||||
"code" : "57852-6",
|
||||
"system" : "http://loinc.org"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -516,7 +516,7 @@ v: {
|
|||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/900000000000207008/version/20210731",
|
||||
"version" : "http://snomed.info/sct/11000172109/version/20210915",
|
||||
"code" : "271872005",
|
||||
"display" : "Old age (qualifier value)"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
|
@ -531,9 +531,8 @@ v: {
|
|||
"code" : "271872005"
|
||||
}, "url": "https://fhir.kbv.de/ValueSet/KBV_VS_Base_Stage_Life--0", "version": "1.2.0", "lang":"null", "useServer":"true", "useClient":"false", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Old age (qualifier value)",
|
||||
"code" : "271872005",
|
||||
"system" : "http://snomed.info/sct"
|
||||
"severity" : "error",
|
||||
"error" : "The code system \"http://snomed.info/sct\" in the include in \"https://fhir.kbv.de/ValueSet/KBV_VS_Base_Stage_Life--0\" is not known; The code provided (http://snomed.info/sct#271872005) is not valid (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -579,7 +578,7 @@ v: {
|
|||
"code" : "840535000",
|
||||
"system" : "http://snomed.info/sct",
|
||||
"severity" : "warning",
|
||||
"error" : "The display \"COVID-19\" is not a valid display for the code {http://snomed.info/sct}840535000 - should be one of ['Antibody to 2019 novel coronavirus', 'Antibody to 2019-nCoV', 'Antibody to SARS-CoV-2', 'Antibody to Severe acute respiratory syndrome coronavirus 2 (substance)', 'Severe acute respiratory syndrome coronavirus 2 Ab', 'Antibody to Severe acute respiratory syndrome coronavirus 2', 'Severe acute respiratory syndrome coronavirus 2 antibody'] (from http://tx.fhir.org/r4)"
|
||||
"error" : "The display \"COVID-19\" is not a valid display for the code {http://snomed.info/sct}840535000 - should be one of ['Antibody to 2019 novel coronavirus', 'Antibody to 2019-nCoV', 'Antibody to severe acute respiratory syndrome coronavirus 2 (substance)', 'Antibody to severe acute respiratory syndrome coronavirus 2', 'Antibody to SARS-CoV-2', 'Severe acute respiratory syndrome coronavirus 2 Ab', 'Severe acute respiratory syndrome coronavirus 2 antibody'] (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -622,7 +621,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 10821000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"10821000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10821000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 10821000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"10821000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10821000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -656,7 +655,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8921000202108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8921000202108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8921000202108) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8921000202108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8921000202108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8921000202108) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -666,7 +665,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8951000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8951000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8951000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8951000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8951000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8951000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -687,7 +686,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 10291000202102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"10291000202102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10291000202102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 10291000202102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"10291000202102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10291000202102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -708,7 +707,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8901000202102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8901000202102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8901000202102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8901000202102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8901000202102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8901000202102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -729,7 +728,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8911000202100 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8911000202100\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8911000202100) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8911000202100 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8911000202100\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8911000202100) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -750,7 +749,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8891000202103 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8891000202103\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8891000202103) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8891000202103 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8891000202103\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8891000202103) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -811,7 +810,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 15991000202102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"15991000202102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#15991000202102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 15991000202102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"15991000202102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#15991000202102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1252,7 +1251,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 10821000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"10821000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10821000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 10821000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"10821000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10821000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1492,7 +1491,7 @@ v: {
|
|||
}, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8921000202108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8921000202108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8921000202108) is not valid in the value set 'No-procedure-performer-function' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8921000202108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8921000202108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8921000202108) is not valid in the value set 'No-procedure-performer-function' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1501,7 +1500,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8921000202108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8921000202108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8921000202108) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8921000202108 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8921000202108\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8921000202108) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1628,7 +1627,7 @@ v: {
|
|||
}, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"NO_MEMBERSHIP_CHECK", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8951000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8951000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8951000202101) is not valid in the value set 'No-procedure-performer-function' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8951000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8951000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8951000202101) is not valid in the value set 'No-procedure-performer-function' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1637,7 +1636,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8951000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8951000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8951000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 8951000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"8951000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8951000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1721,13 +1720,13 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Version 'http://snomed.info/sct/900000000000207008/version/20210331' of the code system 'http://snomed.info/sct' is not known (encountered paired with code = '459231000124102'). ValidVersions = [http://snomed.info/sct/11000146104/version/20210930,http://snomed.info/sct/11000172109/version/20210915,http://snomed.info/sct/20611000087101/version/20210930,http://snomed.info/sct/32506021000036107/version/20210630,http://snomed.info/sct/45991000052106/version/20210531,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20210901,http://snomed.info/sct/900000000000207008/version/20190731,http://snomed.info/sct/900000000000207008/version/20200131,http://snomed.info/sct/900000000000207008/version/20200731,http://snomed.info/sct/900000000000207008/version/20210731]; The code provided (http://snomed.info/sct#459231000124102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)",
|
||||
"error" : "Version 'http://snomed.info/sct/900000000000207008/version/20210331' of the code system 'http://snomed.info/sct' is not known (encountered paired with code = '459231000124102'). ValidVersions = [http://snomed.info/sct/11000146104/version/20210930,http://snomed.info/sct/11000172109/version/20210915,http://snomed.info/sct/20611000087101/version/20220331,http://snomed.info/sct/32506021000036107/version/20210630,http://snomed.info/sct/45991000052106/version/20210531,http://snomed.info/sct/554471000005108/version/20210930,http://snomed.info/sct/731000124108/version/20220301,http://snomed.info/sct/900000000000207008/version/20190731,http://snomed.info/sct/900000000000207008/version/20200131,http://snomed.info/sct/900000000000207008/version/20200731,http://snomed.info/sct/900000000000207008/version/20220131,http://snomed.info/sct/900000000000207008/version/20220331]; The code provided (http://snomed.info/sct#459231000124102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)",
|
||||
"class" : "CODESYSTEM_UNSUPPORTED"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/20611000087101/version/20210930",
|
||||
"version" : "http://snomed.info/sct/11000146104/version/20210930",
|
||||
"code" : "36989005",
|
||||
"display" : "Mumps"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
|
@ -1767,7 +1766,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 35901911000001104 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"35901911000001104\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#35901911000001104) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 35901911000001104 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"35901911000001104\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#35901911000001104) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1800,7 +1799,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 39695211000001102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"39695211000001102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#39695211000001102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 39695211000001102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"39695211000001102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#39695211000001102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1809,7 +1808,7 @@ v: {
|
|||
}, "valueSet" :null, "lang":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"true"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 1 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"1\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#1) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
"error" : "Unable to find code 1 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"1\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#1) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
|
@ -1818,50 +1817,6 @@ v: {
|
|||
}, "valueSet" :null, "lang":"en-US", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"true"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 2 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"2\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#2) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "10821000202101",
|
||||
"display" : "Narkose eller dyp sedasjon med anestesistøtte"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 10821000202101 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"10821000202101\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#10821000202101) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"code" : "8901000202102",
|
||||
"display" : "Boston bowel preparation skala høyre kolon"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"severity" : "error",
|
||||
"error" : "Unable to find code 8901000202102 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20210731); The code \"8901000202102\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#8901000202102) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/11000172109/version/20210915",
|
||||
"code" : "271872005",
|
||||
"display" : "Old age (qualifier value)"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Old age",
|
||||
"code" : "271872005",
|
||||
"system" : "http://snomed.info/sct"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
||||
{"code" : {
|
||||
"system" : "http://snomed.info/sct",
|
||||
"version" : "http://snomed.info/sct/11000146104/version/20210930",
|
||||
"code" : "36989005",
|
||||
"display" : "Mumps"
|
||||
}, "valueSet" :null, "lang":"null", "useServer":"true", "useClient":"true", "guessSystem":"false", "valueSetMode":"ALL_CHECKS", "versionFlexible":"false"}####
|
||||
v: {
|
||||
"display" : "Mumps",
|
||||
"code" : "36989005",
|
||||
"system" : "http://snomed.info/sct"
|
||||
"error" : "Unable to find code 2 in http://snomed.info/sct (version http://snomed.info/sct/900000000000207008/version/20220331); The code \"2\" is not valid in the system http://snomed.info/sct; The code provided (http://snomed.info/sct#2) is not valid in the value set 'All codes known to the system' (from http://tx.fhir.org/r4)"
|
||||
}
|
||||
-------------------------------------------------------------------------------------
|
|
@ -8,11 +8,11 @@
|
|||
"display" : "Subsetted"
|
||||
}]
|
||||
},
|
||||
"url" : "http://fhir.healthintersections.com.au/open/metadata",
|
||||
"version" : "4.0.1-2.0.12-SNAPSHOT",
|
||||
"url" : "http://tx.fhir.org/r4/metadata",
|
||||
"version" : "4.0.1-2.0.14",
|
||||
"name" : "FHIR Reference Server Conformance Statement",
|
||||
"status" : "active",
|
||||
"date" : "2022-01-10T11:07:19.254Z",
|
||||
"date" : "2022-06-09T21:16:00.478Z",
|
||||
"contact" : [{
|
||||
"telecom" : [{
|
||||
"system" : "other",
|
||||
|
@ -23,8 +23,12 @@
|
|||
"instantiates" : ["http://hl7.org/fhir/CapabilityStatement/terminology-server"],
|
||||
"software" : {
|
||||
"name" : "Reference Server",
|
||||
"version" : "2.0.12-SNAPSHOT",
|
||||
"releaseDate" : "2021-12-20T02:28:03.769Z"
|
||||
"version" : "2.0.14",
|
||||
"releaseDate" : "2022-05-13T19:50:55.040Z"
|
||||
},
|
||||
"implementation" : {
|
||||
"description" : "FHIR Server running at http://tx.fhir.org/r4",
|
||||
"url" : "http://tx.fhir.org/r4"
|
||||
},
|
||||
"fhirVersion" : "4.0.1",
|
||||
"format" : ["application/fhir+xml",
|
||||
|
@ -56,7 +60,7 @@
|
|||
},
|
||||
{
|
||||
"name" : "versions",
|
||||
"definition" : "/OperationDefinition/fso-versions"
|
||||
"definition" : "http://tx.fhir.org/r4/OperationDefinition/fso-versions"
|
||||
}]
|
||||
}]
|
||||
}
|
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"resourceType" : "TerminologyCapabilities",
|
||||
"id" : "FhirServer",
|
||||
"url" : "http://fhir.healthintersections.com.au/open/metadata",
|
||||
"url" : "http://tx.fhir.org/r4/metadata",
|
||||
"version" : "1.0.0",
|
||||
"name" : "FHIR Reference Server Teminology Capability Statement",
|
||||
"status" : "active",
|
||||
"date" : "2022-01-07T08:11:26.721Z",
|
||||
"date" : "2022-06-09T11:12:53.805Z",
|
||||
"contact" : [{
|
||||
"telecom" : [{
|
||||
"system" : "other",
|
||||
|
@ -832,9 +832,15 @@
|
|||
{
|
||||
"uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-documentreference-category"
|
||||
},
|
||||
{
|
||||
"uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-observation-category"
|
||||
},
|
||||
{
|
||||
"uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-provenance-participant-type"
|
||||
},
|
||||
{
|
||||
"uri" : "http://hl7.org/fhir/us/core/CodeSystem/us-core-tags"
|
||||
},
|
||||
{
|
||||
"uri" : "http://hl7.org/fhir/variable-type"
|
||||
},
|
|
@ -8,11 +8,11 @@
|
|||
"display" : "Subsetted"
|
||||
}]
|
||||
},
|
||||
"url" : "http://fhir.healthintersections.com.au/open/metadata",
|
||||
"version" : "4.0.1-2.0.12-SNAPSHOT",
|
||||
"url" : "http://tx.fhir.org/r4/metadata",
|
||||
"version" : "4.0.1-2.0.14",
|
||||
"name" : "FHIR Reference Server Conformance Statement",
|
||||
"status" : "active",
|
||||
"date" : "2022-01-10T11:07:19.254Z",
|
||||
"date" : "2022-06-09T21:12:46.775Z",
|
||||
"contact" : [{
|
||||
"telecom" : [{
|
||||
"system" : "other",
|
||||
|
@ -23,8 +23,12 @@
|
|||
"instantiates" : ["http://hl7.org/fhir/CapabilityStatement/terminology-server"],
|
||||
"software" : {
|
||||
"name" : "Reference Server",
|
||||
"version" : "2.0.12-SNAPSHOT",
|
||||
"releaseDate" : "2021-12-20T02:28:03.769Z"
|
||||
"version" : "2.0.14",
|
||||
"releaseDate" : "2022-05-13T19:50:55.040Z"
|
||||
},
|
||||
"implementation" : {
|
||||
"description" : "FHIR Server running at http://tx.fhir.org/r4",
|
||||
"url" : "http://tx.fhir.org/r4"
|
||||
},
|
||||
"fhirVersion" : "4.0.1",
|
||||
"format" : ["application/fhir+xml",
|
||||
|
@ -56,7 +60,7 @@
|
|||
},
|
||||
{
|
||||
"name" : "versions",
|
||||
"definition" : "/OperationDefinition/fso-versions"
|
||||
"definition" : "http://tx.fhir.org/r4/OperationDefinition/fso-versions"
|
||||
}]
|
||||
}]
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue