fix: KIMS 심각도 매핑 수정 (SeverityDesc 사용) + 상호작용 약품 pill 색상 강조
This commit is contained in:
parent
67e576736d
commit
8c20c8b8db
@ -4233,12 +4233,22 @@ def api_kims_interaction_check():
|
|||||||
|
|
||||||
# 3. 상호작용 결과 파싱
|
# 3. 상호작용 결과 파싱
|
||||||
interactions = []
|
interactions = []
|
||||||
severity_text = {1: '심각', 2: '중등도', 3: '경미', 4: '참고', 5: '일반'}
|
severity_color = {'1': '#dc2626', '2': '#f59e0b', '3': '#3b82f6', '4': '#6b7280', '5': '#9ca3af'}
|
||||||
severity_color = {1: '#dc2626', 2: '#f59e0b', 3: '#3b82f6', 4: '#6b7280', 5: '#9ca3af'}
|
|
||||||
|
# 상호작용 있는 약품 코드 수집
|
||||||
|
interaction_drug_codes = set()
|
||||||
|
|
||||||
for alert in kims_data.get('AlertList', []):
|
for alert in kims_data.get('AlertList', []):
|
||||||
for item in alert.get('AlertInfo', []):
|
for item in alert.get('AlertInfo', []):
|
||||||
severity = item.get('SeverityLevel', 5)
|
severity = str(item.get('SeverityLevel', '5'))
|
||||||
|
severity_desc = item.get('SeverityDesc', '') # API에서 직접 제공 (중증, 경미 등)
|
||||||
|
|
||||||
|
# 상호작용 약품 코드 수집
|
||||||
|
if item.get('DrugCode1'):
|
||||||
|
interaction_drug_codes.add(item.get('DrugCode1'))
|
||||||
|
if item.get('DrugCode2'):
|
||||||
|
interaction_drug_codes.add(item.get('DrugCode2'))
|
||||||
|
|
||||||
interactions.append({
|
interactions.append({
|
||||||
'drug1_code': item.get('DrugCode1'),
|
'drug1_code': item.get('DrugCode1'),
|
||||||
'drug1_name': item.get('ProductName1'),
|
'drug1_name': item.get('ProductName1'),
|
||||||
@ -4247,7 +4257,7 @@ def api_kims_interaction_check():
|
|||||||
'generic1': item.get('GenericName1'),
|
'generic1': item.get('GenericName1'),
|
||||||
'generic2': item.get('GenericName2'),
|
'generic2': item.get('GenericName2'),
|
||||||
'severity': severity,
|
'severity': severity,
|
||||||
'severity_text': severity_text.get(severity, '알 수 없음'),
|
'severity_text': severity_desc or ('심각' if severity == '1' else '중등도' if severity == '2' else '경미' if severity == '3' else '참고'),
|
||||||
'severity_color': severity_color.get(severity, '#9ca3af'),
|
'severity_color': severity_color.get(severity, '#9ca3af'),
|
||||||
'description': item.get('Observation', ''),
|
'description': item.get('Observation', ''),
|
||||||
'management': item.get('ClinicalMng', ''),
|
'management': item.get('ClinicalMng', ''),
|
||||||
@ -4262,6 +4272,10 @@ def api_kims_interaction_check():
|
|||||||
total_pairs = len(kd_codes) * (len(kd_codes) - 1) // 2
|
total_pairs = len(kd_codes) * (len(kd_codes) - 1) // 2
|
||||||
safe_count = total_pairs - len(interactions)
|
safe_count = total_pairs - len(interactions)
|
||||||
|
|
||||||
|
# 약품 목록에 상호작용 여부 표시
|
||||||
|
for drug in drugs_info:
|
||||||
|
drug['has_interaction'] = drug['kd_code'] in interaction_drug_codes
|
||||||
|
|
||||||
logging.info(f"KIMS 상호작용 체크 완료: {len(kd_codes)}개 약품, {len(interactions)}건 발견 (처방: {pre_serial})")
|
logging.info(f"KIMS 상호작용 체크 완료: {len(kd_codes)}개 약품, {len(interactions)}건 발견 (처방: {pre_serial})")
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
@ -4270,7 +4284,8 @@ def api_kims_interaction_check():
|
|||||||
'interaction_count': len(interactions),
|
'interaction_count': len(interactions),
|
||||||
'safe_count': max(0, safe_count),
|
'safe_count': max(0, safe_count),
|
||||||
'total_pairs': total_pairs,
|
'total_pairs': total_pairs,
|
||||||
'drugs_checked': drugs_info
|
'drugs_checked': drugs_info,
|
||||||
|
'interaction_drug_codes': list(interaction_drug_codes) # 상호작용 있는 약품 코드
|
||||||
})
|
})
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@ -1193,10 +1193,15 @@
|
|||||||
const interactions = data.interactions || [];
|
const interactions = data.interactions || [];
|
||||||
const drugsChecked = data.drugs_checked || [];
|
const drugsChecked = data.drugs_checked || [];
|
||||||
|
|
||||||
// 약품 목록
|
// 약품 목록 (상호작용 있는 약품은 빨간색/주황색 배경)
|
||||||
const drugsHtml = drugsChecked.map(d =>
|
const drugsHtml = drugsChecked.map(d => {
|
||||||
`<span style="display:inline-block;background:#f1f5f9;padding:4px 8px;border-radius:4px;margin:2px;font-size:12px;">${escapeHtml(d.name.slice(0,20))}</span>`
|
const hasInteraction = d.has_interaction;
|
||||||
).join('');
|
const bgColor = hasInteraction ? '#fef2f2' : '#f1f5f9'; // 연한 빨강 vs 회색
|
||||||
|
const borderColor = hasInteraction ? '#fca5a5' : '#e2e8f0';
|
||||||
|
const textColor = hasInteraction ? '#dc2626' : '#334155';
|
||||||
|
const icon = hasInteraction ? '⚠️ ' : '';
|
||||||
|
return `<span style="display:inline-block;background:${bgColor};border:1px solid ${borderColor};color:${textColor};padding:4px 8px;border-radius:4px;margin:2px;font-size:12px;">${icon}${escapeHtml(d.name.slice(0,20))}</span>`;
|
||||||
|
}).join('');
|
||||||
|
|
||||||
// 상호작용 목록
|
// 상호작용 목록
|
||||||
let interactionsHtml = '';
|
let interactionsHtml = '';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user