- 전체 시스템 데이터 흐름 문서 추가 - 테이블 관계 및 JOIN 경로 명확화 - ingredient_code 중심 설계 반영 - claude.md 메인 문서 추가 - 한약재 정보 관리 시스템 설계 문서 개선 주요 내용: - 코드 체계 (성분코드 vs 보험코드) 설명 - 개선된 JOIN 구조 (5단계 → 3단계) - 효능 태그 시스템 리팩토링 반영 - 개발 가이드 및 주의사항 포함
462 lines
13 KiB
Markdown
462 lines
13 KiB
Markdown
# 한약재 정보 관리 시스템 (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 핵심 테이블 구조
|
|
|
|
```sql
|
|
-- 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 활용 방안
|
|
|
|
```python
|
|
# 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
|
|
|
|
```python
|
|
@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 안전성 검증 시스템
|
|
|
|
```python
|
|
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 데이터 품질 관리
|
|
|
|
```python
|
|
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. 기대 효과
|
|
|
|
1. **근거 기반 처방**
|
|
- 최신 연구 결과 반영
|
|
- 객관적 데이터 기반 의사결정
|
|
|
|
2. **환자 안전성 향상**
|
|
- 실시간 안전성 검증
|
|
- 부작용 예방
|
|
|
|
3. **업무 효율성**
|
|
- 자동화된 정보 관리
|
|
- 빠른 정보 검색
|
|
|
|
4. **지식 축적**
|
|
- 체계적인 데이터베이스
|
|
- 지속적인 학습 시스템
|
|
|
|
5. **표준화**
|
|
- 한약재 정보 표준화
|
|
- 품질 관리 체계화 |