use of org.hl7.fhir.r4.model.ValueSet.ConceptReferenceComponent in project bunsen by cerner.
the class ValueSets method expandValuesIterator.
private static Iterator<Value> expandValuesIterator(ValueSet valueSet) {
List<Value> values = new ArrayList<>();
ValueSetComposeComponent compose = valueSet.getCompose();
for (ConceptSetComponent inclusion : compose.getInclude()) {
for (ConceptReferenceComponent concept : inclusion.getConcept()) {
Value value = new Value();
value.setValueSetUri(valueSet.getUrl());
value.setValueSetVersion(valueSet.getVersion());
value.setSystem(inclusion.getSystem());
value.setVersion(inclusion.getVersion());
value.setValue(concept.getCode());
values.add(value);
}
}
return values.iterator();
}
use of org.hl7.fhir.r4.model.ValueSet.ConceptReferenceComponent in project bunsen by cerner.
the class ValueSets method addToValueSet.
@Override
protected void addToValueSet(ValueSet valueSet, Dataset<Value> values) {
ValueSetComposeComponent composeComponent = valueSet.getCompose();
ConceptSetComponent currentInclusion = null;
ConceptReferenceComponent concept = null;
List<Value> sortedValues = values.sort("system", "version", "value").collectAsList();
// Workaround for the decoder producing an immutable array by replacing it with a mutable one
composeComponent.setInclude(new ArrayList<>(composeComponent.getInclude()));
for (Value value : sortedValues) {
if (currentInclusion == null || !value.getSystem().equals(currentInclusion.getSystem()) || !value.getVersion().equals(currentInclusion.getVersion())) {
// Find a matching inclusion
for (ConceptSetComponent candidate : composeComponent.getInclude()) {
if (value.getSystem().equals(candidate.getSystem()) && value.getVersion().equals(candidate.getVersion())) {
currentInclusion = candidate;
// Workaround for the decoder producing an immutable array by replacing it with a
// mutable one
currentInclusion.setConcept(new ArrayList<>(currentInclusion.getConcept()));
}
}
// No matching inclusion found, so add one
if (currentInclusion == null) {
currentInclusion = composeComponent.addInclude();
currentInclusion.setSystem(value.getSystem());
currentInclusion.setVersion(value.getVersion());
concept = null;
}
}
// Create concept if not exists
if (concept == null || !value.getValue().equals(concept.getCode())) {
concept = currentInclusion.addConcept();
concept.setCode(value.getValue());
}
}
}
use of org.hl7.fhir.r4.model.ValueSet.ConceptReferenceComponent in project snowstorm by IHTSDO.
the class FHIRHelper method convertToECL.
public String convertToECL(ConceptSetComponent setDefn) throws FHIROperationException {
String ecl = "";
boolean firstItem = true;
for (ConceptReferenceComponent concept : setDefn.getConcept()) {
if (firstItem) {
firstItem = false;
} else {
ecl += " OR ";
}
ecl += concept.getCode() + "|" + concept.getDisplay() + "|";
}
ecl += convertFilterToECL(setDefn, firstItem);
return ecl;
}
use of org.hl7.fhir.r4.model.ValueSet.ConceptReferenceComponent in project quality-measure-and-cohort-service by Alvearie.
the class R4FileSystemFhirTerminologyProvider method loadFromFile.
/**
* Loads ValueSet definitions from the filesystem or S3 compatible location
* ValueSet definitions are expected to be stored in FHIR xml or JSON format
* named using the valueSet id (ie 2.16.840.1.113762.1.4.1114.7.json)
*
* @param valueSetInfo contains information for teh VlaueSet we want to load
*/
protected void loadFromFile(ValueSetInfo valueSetInfo) throws RuntimeException {
LOG.debug("Entry: loadFromFile() ValueSet.getId=[{}] version=[{}]", valueSetInfo.getId(), valueSetInfo.getVersion());
VersionedIdentifier valueSetIdentifier = createVersionedIdentifierForValueSet(valueSetInfo);
String valueSetId = valueSetIdentifier.getId();
// get the valueSet codes from the cache if it is there
Map<String, Set<String>> codesToCodeSystems = valueSetToCodesCache.get(valueSetIdentifier);
List<Code> codeList = valueSetCodeCache.get(valueSetIdentifier);
if (codesToCodeSystems == null || codeList == null) {
LOG.debug("loadFromFile() valueSetId={} not found in cache, attempting to load from file", valueSetId);
FileStatus[] valueSetFiles;
FileSystem fileSystem;
// List the files in the terminology directory that end in xml or json
try {
fileSystem = terminologyDirectory.getFileSystem(configuration);
valueSetFiles = fileSystem.listStatus(terminologyDirectory, new PathFilter() {
@Override
public boolean accept(Path path) {
return path.getName().equalsIgnoreCase(valueSetId + ".json") || path.getName().equalsIgnoreCase(valueSetId + ".xml");
}
});
} catch (ConfigurationException | DataFormatException | IOException e) {
LOG.error("Error attempting to get ValueSet file for ValueSet [" + valueSetId + " from " + terminologyDirectory.toString(), e);
throw new RuntimeException("Error attempting to get ValueSet file for ValueSet [" + valueSetId + " from " + terminologyDirectory.toString(), e);
}
if (valueSetFiles.length == 0) {
LOG.error("No valueSet file " + valueSetId + ".json or " + valueSetId + ".xml found in terminology directory " + terminologyDirectory.toString());
throw new RuntimeException("No valueSet file " + valueSetId + ".json or " + valueSetId + ".xml found in terminology directory " + terminologyDirectory.toString());
} else {
if (valueSetFiles.length > 1) {
LOG.warn("Multiple ValueSet files found for ValueSet {} in terminology directory {}. File {} will be used.", valueSetId, terminologyDirectory.toString(), valueSetFiles[0].toString());
}
ValueSet valueSetFhirR4 = null;
try {
// Use the fhir parsers to convert file contents back into ValueSet fhir object
if (valueSetFiles[0].getPath().getName().toLowerCase().endsWith(".xml")) {
valueSetFhirR4 = (ValueSet) fhirContext.newXmlParser().parseResource(new InputStreamReader(fileSystem.open(valueSetFiles[0].getPath())));
LOG.info("Unmarshalled xml {}", valueSetFhirR4.getId());
} else if (valueSetFiles[0].getPath().getName().toLowerCase().endsWith(".json")) {
valueSetFhirR4 = (ValueSet) fhirContext.newJsonParser().parseResource(new InputStreamReader(fileSystem.open(valueSetFiles[0].getPath())));
LOG.info("Unmarshalled json {}", valueSetFhirR4.getId());
}
// This improves performance for the in() method for code lookup in large valuesets
codesToCodeSystems = new HashMap<String, Set<String>>();
// cache the list of code objects for the expand method
codeList = new ArrayList<Code>();
for (ConceptSetComponent csc : valueSetFhirR4.getCompose().getInclude()) {
for (ConceptReferenceComponent cfc : csc.getConcept()) {
codeList.add(new Code().withCode(cfc.getCode()).withDisplay(cfc.getDisplay()).withSystem(csc.getSystem()).withVersion(csc.getVersion()));
Set<String> codeSystems = codesToCodeSystems.get(cfc.getCode());
if (codeSystems == null) {
codeSystems = new HashSet<String>();
codesToCodeSystems.put(cfc.getCode(), codeSystems);
}
codeSystems.add(csc.getSystem());
}
}
valueSetToCodesCache.put(valueSetIdentifier, codesToCodeSystems);
valueSetCodeCache.put(valueSetIdentifier, codeList);
} catch (ConfigurationException | DataFormatException | IOException e) {
LOG.error("Error attempting to deserialize ValueSet " + valueSetFiles[0].getPath().toString(), e);
throw new RuntimeException("Error attempting to deserialize ValueSet " + valueSetFiles[0].getPath().toString(), e);
}
}
}
LOG.debug("Exit: loadFromFile() ValueSet.getId=[{}] version=[{}]", valueSetInfo.getId(), valueSetInfo.getVersion());
}
use of org.hl7.fhir.r4.model.ValueSet.ConceptReferenceComponent in project kindling by HL7.
the class CodeListToValueSetParser method generateConceptMapV3.
private void generateConceptMapV3(String v3map, ValueSet vs, CodeSystem cs) throws Exception {
if (!v3map.startsWith("http://terminology.hl7.org/ValueSet/v3-"))
v3map = "http://terminology.hl7.org/ValueSet/v3-" + v3map;
ConceptMap cm = new ConceptMap();
cm.setVersion(version);
cm.setId("cm-" + vs.getId() + "-v3");
cm.setUserData("path", cm.getId() + ".html");
cm.setUserData("generate", true);
cm.setUrl("http://hl7.org/fhir/ConceptMap/" + cm.getId());
cm.setName("v3." + vs.getName());
cm.setTitle("v3 map for " + vs.present());
cm.setPublisher("HL7 (FHIR Project)");
for (ContactDetail cc : vs.getContact()) {
ContactDetail cd = cm.addContact();
cd.setName(cc.getName());
for (ContactPoint ccs : cc.getTelecom()) cd.addTelecom(ccs.copy());
}
cm.setCopyright(vs.getCopyright());
// until we publish DSTU, then .review
cm.setStatus(vs.getStatus());
cm.setDate(vs.getDate());
cm.setSource(Factory.newCanonical(vs.getUrl()));
cm.setTarget(Factory.newCanonical(v3map));
if (cs != null)
processV3ConceptDefs(cm, cs.getUrl(), cs.getConcept());
for (ConceptSetComponent cc : vs.getCompose().getInclude()) for (ConceptReferenceComponent c : cc.getConcept()) {
processV3Map(cm, cc.getSystem(), c.getCode(), c.getUserString("v2"));
}
maps.see(cm, packageInfo);
}
Aggregations