46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
|
|
import json
|
|
import os
|
|
|
|
class CodeTranslator:
|
|
def __init__(self):
|
|
self.maps = {}
|
|
|
|
def load_concept_maps(self, path):
|
|
if os.path.isdir(path):
|
|
for filename in os.listdir(path):
|
|
if filename.endswith('.json'):
|
|
self._load_map_file(os.path.join(path, filename))
|
|
else:
|
|
self._load_map_file(path)
|
|
|
|
def _load_map_file(self, filepath):
|
|
with open(filepath, 'r') as f:
|
|
concept_map = json.load(f)
|
|
self._parse_concept_map(concept_map)
|
|
|
|
def _parse_concept_map(self, concept_map):
|
|
if 'group' in concept_map:
|
|
for group in concept_map['group']:
|
|
source_system = group.get('source')
|
|
target_system = group.get('target')
|
|
if source_system and target_system:
|
|
if source_system not in self.maps:
|
|
self.maps[source_system] = {}
|
|
if target_system not in self.maps[source_system]:
|
|
self.maps[source_system][target_system] = {}
|
|
for element in group.get('element', []):
|
|
source_code = element.get('code')
|
|
if 'target' in element:
|
|
for target in element['target']:
|
|
target_code = target.get('code')
|
|
if source_code and target_code:
|
|
self.maps[source_system][target_system][source_code] = target_code
|
|
|
|
def translate(self, system, code):
|
|
if system in self.maps:
|
|
for target_system in self.maps[system]:
|
|
if code in self.maps[system][target_system]:
|
|
return self.maps[system][target_system][code]
|
|
return None
|