func()

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
}