- 전체 시스템 데이터 흐름 문서 추가 - 테이블 관계 및 JOIN 경로 명확화 - ingredient_code 중심 설계 반영 - claude.md 메인 문서 추가 - 한약재 정보 관리 시스템 설계 문서 개선 주요 내용: - 코드 체계 (성분코드 vs 보험코드) 설명 - 개선된 JOIN 구조 (5단계 → 3단계) - 효능 태그 시스템 리팩토링 반영 - 개발 가이드 및 주의사항 포함
13 KiB
13 KiB
한약재 정보 관리 시스템 (K-Drug Information System)
1. 개요
1.1 목표
- 양방약 DUR(Drug Utilization Review) 시스템처럼 한약재 정보를 체계적으로 관리
- AI/API를 통한 지속적인 정보 업데이트
- 근거 기반 한의학(Evidence-Based Korean Medicine) 데이터베이스 구축
1.2 벤치마킹
- 건강보험심사평가원 의약품안전사용서비스(DUR)
- KIMS (대한민국의약정보센터)
- Micromedex (미국)
- 한국한의학연구원 전통의학정보포털
2. 데이터베이스 설계
2.1 핵심 테이블 구조
-- 1. 약재 기본 정보 (확장)
CREATE TABLE herb_master_extended (
herb_id INTEGER PRIMARY KEY,
ingredient_code VARCHAR(10) UNIQUE,
-- 기본 명칭
name_korean VARCHAR(100) NOT NULL,
name_hanja VARCHAR(100),
name_latin VARCHAR(200),
name_english VARCHAR(200),
name_pharmaceutical VARCHAR(200), -- 약전명
-- 분류 정보
family_latin VARCHAR(100), -- 과명
genus_species VARCHAR(200), -- 학명
origin_plant TEXT, -- 기원식물
medicinal_part VARCHAR(100), -- 약용부위
-- 성미귀경
property VARCHAR(50), -- 성(性): 한/열/온/량/평
taste VARCHAR(100), -- 미(味): 고/감/산/신/함/담
meridian_tropism TEXT, -- 귀경: 입경 경락
-- 효능 효과
main_effects TEXT, -- 주요 효능
indications TEXT, -- 적응증
contraindications TEXT, -- 금기증
precautions TEXT, -- 주의사항
-- 용법 용량
dosage_range VARCHAR(50), -- 상용량 (예: "3-12g")
dosage_max VARCHAR(50), -- 극량
preparation_method TEXT, -- 포제법
-- 성분 정보
active_compounds TEXT, -- 주요 성분
chemical_constituents JSON, -- 화학 성분 상세 (JSON)
-- 약리 작용
pharmacological_effects TEXT, -- 약리작용
clinical_applications TEXT, -- 임상응용
-- 상호작용
drug_interactions JSON, -- 약물 상호작용 (JSON)
food_interactions JSON, -- 음식 상호작용 (JSON)
-- 품질 기준
quality_standards TEXT, -- 품질 기준
identification_method TEXT, -- 감별법
-- 메타데이터
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
data_source VARCHAR(100), -- 데이터 출처
reliability_score INTEGER, -- 신뢰도 점수 (1-10)
review_status VARCHAR(20) -- 검토 상태
);
-- 2. 약재 연구 문헌
CREATE TABLE herb_research_papers (
paper_id INTEGER PRIMARY KEY,
ingredient_code VARCHAR(10), -- 성분코드 직접 사용 (개선)
title TEXT NOT NULL,
authors TEXT,
journal VARCHAR(200),
publication_year INTEGER,
volume VARCHAR(50),
pages VARCHAR(50),
doi VARCHAR(100),
pubmed_id VARCHAR(20),
abstract TEXT,
keywords TEXT,
study_type VARCHAR(50), -- RCT, 관찰연구, 리뷰 등
evidence_level INTEGER, -- 근거수준 (1-5)
findings TEXT, -- 주요 발견
clinical_relevance TEXT, -- 임상적 의미
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
indexed_at TIMESTAMP
);
-- 3. 약재 안전성 정보
CREATE TABLE herb_safety_info (
safety_id INTEGER PRIMARY KEY,
ingredient_code VARCHAR(10), -- 성분코드 직접 사용 (개선)
-- 독성 정보
toxicity_level VARCHAR(20), -- 독성 등급
ld50_value VARCHAR(50), -- 반수치사량
toxic_compounds TEXT, -- 독성 성분
-- 부작용
common_side_effects TEXT, -- 흔한 부작용
rare_side_effects TEXT, -- 드문 부작용
serious_adverse_events TEXT, -- 중대 이상반응
-- 특수 집단
pregnancy_category VARCHAR(10), -- 임신 등급
pregnancy_safety TEXT, -- 임신 안전성
lactation_safety TEXT, -- 수유 안전성
pediatric_use TEXT, -- 소아 사용
geriatric_use TEXT, -- 노인 사용
-- 모니터링
monitoring_parameters TEXT, -- 모니터링 항목
laboratory_tests TEXT, -- 필요 검사
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 4. 처방 구성 규칙
CREATE TABLE prescription_rules (
rule_id INTEGER PRIMARY KEY,
-- 배합 규칙 (성분코드 사용으로 개선)
ingredient_code_1 VARCHAR(10),
ingredient_code_2 VARCHAR(10),
relationship_type VARCHAR(50), -- 상수/상사/상외/상오/상쇄/상반/상살
description TEXT,
clinical_significance TEXT,
evidence_source TEXT,
severity_level INTEGER, -- 심각도 (1-5)
action_required VARCHAR(50), -- 조치사항
is_absolute BOOLEAN, -- 절대 금기 여부
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 5. 질병-약재 매핑
CREATE TABLE disease_herb_mapping (
mapping_id INTEGER PRIMARY KEY,
disease_code VARCHAR(20), -- KCD 코드
disease_name VARCHAR(200),
herb_id INTEGER REFERENCES herb_master_extended(herb_id),
indication_type VARCHAR(50), -- 주적응증/부적응증
evidence_level INTEGER, -- 근거수준
recommendation_grade VARCHAR(10), -- 권고등급
clinical_notes TEXT,
references TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 6. AI/API 업데이트 로그
CREATE TABLE data_update_logs (
log_id INTEGER PRIMARY KEY,
update_type VARCHAR(50), -- AI/API/MANUAL
source VARCHAR(100), -- 데이터 소스
target_table VARCHAR(50),
target_id INTEGER,
before_data JSON, -- 변경 전 데이터
after_data JSON, -- 변경 후 데이터
update_reason TEXT,
confidence_score FLOAT, -- AI 신뢰도
is_reviewed BOOLEAN DEFAULT FALSE,
reviewed_by VARCHAR(50),
review_notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
3. API/AI 연동 방안
3.1 외부 데이터 소스
국내 소스
-
한국한의학연구원 API
- 한약재 데이터베이스
- 처방 데이터베이스
- 임상 연구 자료
-
건강보험심사평가원
- 한약제제 급여 정보
- 안전성 정보
-
식품의약품안전처
- 한약재 품질 기준
- 안전성 정보
국제 소스
-
PubMed API
- 한약재 연구 논문
- 임상시험 결과
-
WHO Traditional Medicine
- 국제 표준 정보
- 안전성 데이터
-
ClinicalTrials.gov
- 진행 중인 임상시험
3.2 AI 활용 방안
# AI 기반 정보 추출 및 업데이트 예시
class HerbInfoAIUpdater:
def __init__(self):
self.nlp_model = load_korean_medical_nlp()
self.ocr_model = load_medical_ocr()
def extract_from_literature(self, pdf_path):
"""의학 문헌에서 약재 정보 추출"""
text = self.ocr_model.extract_text(pdf_path)
entities = self.nlp_model.extract_entities(text, types=[
'HERB_NAME',
'DOSAGE',
'INDICATION',
'CONTRAINDICATION',
'SIDE_EFFECT',
'INTERACTION'
])
return self.validate_and_structure(entities)
def update_from_clinical_data(self, clinical_records):
"""임상 데이터에서 패턴 분석"""
# 처방 패턴 분석
prescription_patterns = self.analyze_prescription_patterns(clinical_records)
# 효능 검증
efficacy_data = self.validate_efficacy(clinical_records)
# 안전성 모니터링
safety_signals = self.detect_safety_signals(clinical_records)
return {
'patterns': prescription_patterns,
'efficacy': efficacy_data,
'safety': safety_signals
}
def cross_reference_validation(self, herb_info):
"""교차 검증"""
sources = [
self.query_kmri_api(herb_info['name']),
self.query_pubmed(herb_info['latin_name']),
self.query_who_database(herb_info['code'])
]
return self.reconcile_information(sources)
4. 기능 구현
4.1 약재 정보 조회 API
@app.route('/api/herbs/<int:herb_id>/full-info', methods=['GET'])
def get_herb_full_info(herb_id):
"""약재 종합 정보 조회"""
return {
'basic_info': get_basic_info(herb_id),
'pharmacology': get_pharmacology(herb_id),
'safety': get_safety_info(herb_id),
'interactions': get_interactions(herb_id),
'research': get_research_papers(herb_id),
'clinical_use': get_clinical_applications(herb_id)
}
@app.route('/api/herbs/search', methods=['POST'])
def search_herbs_advanced():
"""고급 검색"""
criteria = request.json
# 증상으로 검색
if criteria.get('symptoms'):
return search_by_symptoms(criteria['symptoms'])
# 성분으로 검색
if criteria.get('compounds'):
return search_by_compounds(criteria['compounds'])
# 처방 호환성 검색
if criteria.get('compatibility'):
return check_prescription_compatibility(criteria['herbs'])
4.2 안전성 검증 시스템
class HerbSafetyChecker:
def check_prescription_safety(self, herbs, patient_info):
"""처방 안전성 종합 검증"""
results = {
'is_safe': True,
'warnings': [],
'contraindications': [],
'interactions': [],
'dosage_alerts': []
}
# 1. 약재 간 상호작용 확인
for herb1, herb2 in combinations(herbs, 2):
interaction = self.check_herb_interaction(herb1, herb2)
if interaction:
results['interactions'].append(interaction)
# 2. 환자 특성별 금기 확인
if patient_info.get('pregnancy'):
self.check_pregnancy_safety(herbs, results)
if patient_info.get('allergies'):
self.check_allergy_risk(herbs, patient_info['allergies'], results)
# 3. 용량 검증
self.validate_dosages(herbs, results)
# 4. 질병-약물 상호작용
if patient_info.get('conditions'):
self.check_disease_interactions(herbs, patient_info['conditions'], results)
return results
4.3 데이터 품질 관리
class DataQualityManager:
def validate_herb_data(self, herb_data):
"""데이터 품질 검증"""
scores = {
'completeness': self.check_completeness(herb_data),
'accuracy': self.verify_accuracy(herb_data),
'consistency': self.check_consistency(herb_data),
'timeliness': self.check_timeliness(herb_data)
}
herb_data['quality_score'] = sum(scores.values()) / len(scores)
herb_data['quality_details'] = scores
return herb_data
def reconcile_conflicts(self, data_sources):
"""데이터 충돌 해결"""
# 신뢰도 기반 가중 평균
weighted_data = {}
for source in data_sources:
weight = source['reliability_score']
for field, value in source['data'].items():
if field not in weighted_data:
weighted_data[field] = []
weighted_data[field].append((value, weight))
# 최종 값 결정
final_data = {}
for field, values in weighted_data.items():
final_data[field] = self.select_best_value(values)
return final_data
5. 사용자 인터페이스
5.1 약재 정보 대시보드
- 약재 상세 정보 카드
- 효능/효과 시각화
- 안전성 정보 알림
- 연구 논문 목록
- 처방 활용 통계
5.2 처방 안전성 검증
- 실시간 DUR 체크
- 약재 조합 검증
- 용량 적정성 평가
- 환자별 맞춤 알림
5.3 지식 관리 도구
- 새로운 연구 결과 알림
- 데이터 품질 모니터링
- AI 제안 검토
- 전문가 협업 도구
6. 구현 로드맵
Phase 1: 기반 구축 (1-2개월)
- 확장 데이터베이스 스키마 구현
- 기본 CRUD API 개발
- 데이터 마이그레이션
Phase 2: 외부 연동 (2-3개월)
- 한의학연구원 API 연동
- PubMed API 연동
- 자동 업데이트 스케줄러
Phase 3: AI 통합 (3-4개월)
- NLP 모델 훈련
- 문헌 자동 분석
- 패턴 인식 시스템
Phase 4: 안전성 시스템 (2개월)
- DUR 체크 시스템
- 실시간 경고 시스템
- 보고서 생성
Phase 5: 고도화 (지속)
- 사용자 피드백 수집
- 모델 개선
- 새로운 데이터 소스 추가
7. 기대 효과
-
근거 기반 처방
- 최신 연구 결과 반영
- 객관적 데이터 기반 의사결정
-
환자 안전성 향상
- 실시간 안전성 검증
- 부작용 예방
-
업무 효율성
- 자동화된 정보 관리
- 빠른 정보 검색
-
지식 축적
- 체계적인 데이터베이스
- 지속적인 학습 시스템
-
표준화
- 한약재 정보 표준화
- 품질 관리 체계화