in wstl1/mapping_engine/harmonization/harmonizecode/local_code_harmonizer.go [63:120]
func (h *LocalCodeHarmonizer) HarmonizeWithTarget(sourceCode, sourceSystem, targetSystem, sourceName string) ([]HarmonizedCode, error) {
conceptMap, ok := h.cachedMaps[sourceName]
if !ok {
return nil, fmt.Errorf("the harmonization source %q does not exist", sourceName)
}
mapGroups := conceptMap.groups
if len(mapGroups) == 0 {
return nil, fmt.Errorf("concept map %q must have at least one group", sourceName)
}
var output []HarmonizedCode
for _, group := range mapGroups {
if !groupMatch(sourceSystem, targetSystem, group) {
continue
}
targets, ok := group.lookups[sourceCode]
if !ok {
if group.unmapped == nil {
continue
}
switch mode := group.unmapped.Mode; mode {
case unmappedModeFixed:
output = append(output, HarmonizedCode{
Version: conceptMap.version,
System: group.targetSystem,
Code: group.unmapped.Code,
Display: group.unmapped.Display,
})
case unmappedModeProvided:
output = append(output, HarmonizedCode{
Version: conceptMap.version,
System: group.targetSystem,
Code: sourceCode,
Display: sourceCode,
})
}
continue
}
for _, target := range targets {
output = append(output, HarmonizedCode{
Version: conceptMap.version,
System: group.targetSystem,
Code: target.Code,
Display: target.Display,
})
}
}
if len(output) == 0 {
output = append(output, HarmonizedCode{
Code: sourceCode,
System: fmt.Sprintf("%s-%s", sourceName, "unharmonized"),
Version: conceptMap.version,
})
}
return output, nil
}