Merge pull request #1446 from jamesagnew/1445-an-implicit-all-loinc-valueset-needs-to-be-created-when-uploading-the-loinc-codesystem
Resolve "An implicit all-loinc ValueSet needs to be created when uploading the LOINC CodeSystem."
This commit is contained in:
commit
e5c8ffdc20
|
@ -32,6 +32,7 @@ import org.apache.commons.lang3.Validate;
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
import org.hl7.fhir.r4.model.CodeSystem;
|
import org.hl7.fhir.r4.model.CodeSystem;
|
||||||
import org.hl7.fhir.r4.model.ConceptMap;
|
import org.hl7.fhir.r4.model.ConceptMap;
|
||||||
|
import org.hl7.fhir.r4.model.Enumerations;
|
||||||
import org.hl7.fhir.r4.model.ValueSet;
|
import org.hl7.fhir.r4.model.ValueSet;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
@ -556,6 +557,8 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
|
||||||
|
|
||||||
IOUtils.closeQuietly(theDescriptors);
|
IOUtils.closeQuietly(theDescriptors);
|
||||||
|
|
||||||
|
valueSets.add(getValueSetLoincAll());
|
||||||
|
|
||||||
for (Entry<String, TermConcept> next : code2concept.entrySet()) {
|
for (Entry<String, TermConcept> next : code2concept.entrySet()) {
|
||||||
TermConcept nextConcept = next.getValue();
|
TermConcept nextConcept = next.getValue();
|
||||||
if (nextConcept.getParents().isEmpty()) {
|
if (nextConcept.getParents().isEmpty()) {
|
||||||
|
@ -573,6 +576,23 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
|
||||||
return new UploadStatistics(conceptCount, target);
|
return new UploadStatistics(conceptCount, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ValueSet getValueSetLoincAll() {
|
||||||
|
ValueSet retVal = new ValueSet();
|
||||||
|
|
||||||
|
retVal.setId("loinc-all");
|
||||||
|
retVal.setUrl("http://loinc.org/fhir/ValueSet/loinc-all");
|
||||||
|
retVal.setVersion("1.0.0");
|
||||||
|
retVal.setName("All LOINC codes");
|
||||||
|
retVal.setStatus(Enumerations.PublicationStatus.ACTIVE);
|
||||||
|
retVal.setDate(new Date());
|
||||||
|
retVal.setPublisher("Regenstrief Institute, Inc.");
|
||||||
|
retVal.setDescription("A value set that includes all LOINC codes");
|
||||||
|
retVal.setCopyright("This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at https://loinc.org/license/");
|
||||||
|
retVal.getCompose().addInclude().setSystem(IHapiTerminologyLoaderSvc.LOINC_URI);
|
||||||
|
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
private UploadStatistics processSnomedCtFiles(LoadedFileDescriptors theDescriptors, RequestDetails theRequestDetails) {
|
private UploadStatistics processSnomedCtFiles(LoadedFileDescriptors theDescriptors, RequestDetails theRequestDetails) {
|
||||||
final TermCodeSystemVersion codeSystemVersion = new TermCodeSystemVersion();
|
final TermCodeSystemVersion codeSystemVersion = new TermCodeSystemVersion();
|
||||||
final Map<String, TermConcept> id2concept = new HashMap<>();
|
final Map<String, TermConcept> id2concept = new HashMap<>();
|
||||||
|
|
|
@ -255,6 +255,22 @@ public class TerminologyLoaderSvcLoincTest extends BaseLoaderTest {
|
||||||
assertEquals("42176-8", vs.getCompose().getInclude().get(0).getConcept().get(0).getCode());
|
assertEquals("42176-8", vs.getCompose().getInclude().get(0).getConcept().get(0).getCode());
|
||||||
assertEquals("1,3 beta glucan [Mass/volume] in Serum", vs.getCompose().getInclude().get(0).getConcept().get(0).getDisplay());
|
assertEquals("1,3 beta glucan [Mass/volume] in Serum", vs.getCompose().getInclude().get(0).getConcept().get(0).getDisplay());
|
||||||
|
|
||||||
|
// All LOINC codes
|
||||||
|
assertTrue(valueSets.containsKey("loinc-all"));
|
||||||
|
vs = valueSets.get("loinc-all");
|
||||||
|
assertEquals("http://loinc.org/fhir/ValueSet/loinc-all", vs.getUrl());
|
||||||
|
assertEquals("1.0.0", vs.getVersion());
|
||||||
|
assertEquals("All LOINC codes", vs.getName());
|
||||||
|
assertEquals(Enumerations.PublicationStatus.ACTIVE, vs.getStatus());
|
||||||
|
assertTrue(vs.hasDate());
|
||||||
|
assertEquals("Regenstrief Institute, Inc.", vs.getPublisher());
|
||||||
|
assertEquals("A value set that includes all LOINC codes", vs.getDescription());
|
||||||
|
assertEquals("This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at https://loinc.org/license/", vs.getCopyright());
|
||||||
|
assertTrue(vs.hasCompose());
|
||||||
|
assertTrue(vs.getCompose().hasInclude());
|
||||||
|
assertEquals(1, vs.getCompose().getInclude().size());
|
||||||
|
assertEquals(IHapiTerminologyLoaderSvc.LOINC_URI, vs.getCompose().getInclude().get(0).getSystem());
|
||||||
|
|
||||||
// IEEE Medical Device Codes
|
// IEEE Medical Device Codes
|
||||||
conceptMap = conceptMaps.get(LoincIeeeMedicalDeviceCodeHandler.LOINC_IEEE_CM_ID);
|
conceptMap = conceptMaps.get(LoincIeeeMedicalDeviceCodeHandler.LOINC_IEEE_CM_ID);
|
||||||
ourLog.debug(FhirContext.forR4().newXmlParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
|
ourLog.debug(FhirContext.forR4().newXmlParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
|
||||||
|
|
|
@ -29,6 +29,7 @@ import org.springframework.transaction.support.TransactionTemplate;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
@ -606,14 +607,6 @@ public class TerminologySvcImplR4Test extends BaseJpaR4Test {
|
||||||
loadAndPersistCodeSystem();
|
loadAndPersistCodeSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testTest() {
|
|
||||||
ourLog.info("as is: {}", TermValueSetPreExpansionStatusEnum.EXPANSION_IN_PROGRESS);
|
|
||||||
ourLog.info("toString: {}", TermValueSetPreExpansionStatusEnum.EXPANSION_IN_PROGRESS.toString());
|
|
||||||
ourLog.info("name: {}", TermValueSetPreExpansionStatusEnum.EXPANSION_IN_PROGRESS.name());
|
|
||||||
ourLog.info("getCode: {}", TermValueSetPreExpansionStatusEnum.EXPANSION_IN_PROGRESS.getCode());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDuplicateConceptMapUrls() {
|
public void testDuplicateConceptMapUrls() {
|
||||||
createAndPersistConceptMap();
|
createAndPersistConceptMap();
|
||||||
|
|
|
@ -82,6 +82,11 @@
|
||||||
LOINC concepts now include multiaxial hierarchical properties (e.g. <![CDATA[<code>parent</code>]]> and
|
LOINC concepts now include multiaxial hierarchical properties (e.g. <![CDATA[<code>parent</code>]]> and
|
||||||
<![CDATA[<code>child</code>]]>, which identify parent and child concepts.
|
<![CDATA[<code>child</code>]]>, which identify parent and child concepts.
|
||||||
</action>
|
</action>
|
||||||
|
<action type="add" issue="1445">
|
||||||
|
When loading LOINC terminology, a new ValueSet is automatically created with a single include element that
|
||||||
|
identifies the LOINC CodeSystem in <![CDATA[<code>ValueSet.compose.include.system</code>]]>. This ValueSet
|
||||||
|
includes all LOINC codes.
|
||||||
|
</action>
|
||||||
</release>
|
</release>
|
||||||
<release version="4.0.0" date="2019-08-14" description="Igloo">
|
<release version="4.0.0" date="2019-08-14" description="Igloo">
|
||||||
<action type="add">
|
<action type="add">
|
||||||
|
|
Loading…
Reference in New Issue