# 한약재 정보 관리 시스템 (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. **표준화**
   - 한약재 정보 표준화
   - 품질 관리 체계화