# 직접조제(Custom Compound) 고도화 기획 문서

## 1. 현황 분석

### 1.1 현재 직접조제 데이터 구조

#### 실제 데이터 사례
```
Compound ID 10: 휴먼건강 3.0g (단품)
Compound ID 8: 휴먼건강 2.0g (단품)
Compound ID 7: 휴먼일당귀 100.0g (단품)
Compound ID 6: 휴먼일당귀 100.0g (단품)
```

#### 현재 저장 방식
- formula_id: NULL
- is_custom: 0 (잘못된 설정)
- custom_type: 'standard' (잘못된 설정)
- custom_summary: NULL
- 약재 정보: compound_ingredients에 단일 약재로 저장

### 1.2 문제점

1. **분류 체계 미비**
   - 직접조제임에도 is_custom=0으로 저장
   - custom_type이 'standard'로 잘못 설정
   - 표준처방과 직접조제 구분 불명확

2. **데이터 무결성**
   - formula_id NULL이지만 custom 플래그 미설정
   - 직접조제 사유/목적 미기록
   - 처방명 없음 (custom_summary 미사용)

3. **관리 기능 부족**
   - 직접조제 이력 추적 어려움
   - 가격 책정 기준 불명확
   - 재조제시 참조 데이터 부재

## 2. 직접조제 유형 분류

### 2.1 단품 판매 (Single Item)
- **특징**: 단일 약재 판매
- **사례**: 녹용 100g, 홍삼 50g
- **용도**: 환자 요청에 의한 약재 구매

### 2.2 맞춤 조제 (Custom Formula)
- **특징**: 여러 약재 조합하여 맞춤 처방
- **사례**: 기존 처방 가감방, 한약사 임의 조제
- **용도**: 환자 체질/증상에 맞춘 개별화 처방

### 2.3 OTC 조제 (Over The Counter)
- **특징**: 처방전 없이 판매 가능한 제품
- **사례**: 쌍화탕 파우치, 공진단
- **용도**: 일반 판매용 제품

### 2.4 테스트/샘플 (Test/Sample)
- **특징**: 시음용, 테스트용 소량 조제
- **사례**: 처방 샘플 1일분
- **용도**: 환자 시음, 품질 테스트

## 3. 개선 방안

### 3.1 데이터 구조 개선

#### 3.1.1 compounds 테이블 수정
```sql
-- 직접조제 분류 강화
ALTER TABLE compounds ADD COLUMN custom_category TEXT;
-- 'SINGLE_ITEM', 'CUSTOM_FORMULA', 'OTC', 'SAMPLE'

ALTER TABLE compounds ADD COLUMN custom_name TEXT;
-- 직접조제명 (예: '감기 맞춤처방', '홍삼 단품')

ALTER TABLE compounds ADD COLUMN custom_purpose TEXT;
-- 조제 목적/사유

ALTER TABLE compounds ADD COLUMN reference_compound_id INTEGER;
-- 재조제시 참조할 이전 조제 ID
```

#### 3.1.2 custom_formulas 테이블 신규
```sql
CREATE TABLE custom_formulas (
    custom_formula_id INTEGER PRIMARY KEY AUTOINCREMENT,
    compound_id INTEGER REFERENCES compounds(compound_id),
    formula_name TEXT NOT NULL,
    formula_description TEXT,
    base_formula_id INTEGER REFERENCES formulas(formula_id),
    -- 기본이 된 표준처방 (가감방인 경우)

    modification_summary TEXT,
    -- 가감 내용 요약

    symptoms TEXT,
    -- 대상 증상

    contraindications TEXT,
    -- 금기사항

    created_by TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,

    is_reusable BOOLEAN DEFAULT 0,
    -- 재사용 가능 여부 (다른 환자에게도 적용 가능)

    reuse_count INTEGER DEFAULT 0
    -- 재사용 횟수
);
```

### 3.2 비즈니스 로직 개선

#### 3.2.1 직접조제 생성 프로세스
```
1. 조제 유형 선택
   └─ 단품/맞춤/OTC/샘플

2. 유형별 정보 입력
   ├─ 단품: 약재, 용량, 판매사유
   ├─ 맞춤: 처방명, 약재구성, 증상, 기반처방
   ├─ OTC: 제품명, 수량
   └─ 샘플: 목적, 대상처방, 용량

3. 가격 책정
   ├─ 자동계산: 약재원가 + 조제료
   └─ 수동입력: 특별가 적용

4. 데이터 저장
   ├─ compounds: is_custom=1, custom_category 설정
   ├─ compound_ingredients: 약재 구성
   └─ custom_formulas: 맞춤처방 상세정보
```

#### 3.2.2 직접조제 관리 기능
1. **템플릿 관리**
   - 자주 사용하는 직접조제 템플릿 저장
   - 템플릿에서 빠른 조제 생성

2. **이력 관리**
   - 환자별 직접조제 이력 조회
   - 동일 처방 재조제 기능

3. **가격 정책**
   - 직접조제 유형별 조제료 설정
   - 단품 판매 마진율 관리

### 3.3 UI/UX 개선

#### 3.3.1 직접조제 입력 화면
```
┌─────────────── 직접조제 등록 ──────────────┐
│                                            │
│ 조제 유형: [단품 판매 ▼]                    │
│                                            │
│ ─────── 기본 정보 ─────────                │
│ 조제명: [________________]                 │
│ 환자: [환자선택 ▼] 또는 [비회원]            │
│                                            │
│ ─────── 약재 구성 ─────────                │
│ [+ 약재 추가]                              │
│ ┌────────┬──────┬──────┬────┐            │
│ │약재명   │용량   │단가   │삭제 │            │
│ ├────────┼──────┼──────┼────┤            │
│ │홍삼     │100g  │500원/g│ X  │            │
│ └────────┴──────┴──────┴────┘            │
│                                            │
│ ─────── 가격 정보 ─────────                │
│ 약재비: 50,000원                           │
│ 조제료: [10,000원]                         │
│ 판매가: [60,000원]                         │
│                                            │
│ 조제 목적: [________________]               │
│ 비고: [____________________]               │
│                                            │
│ [템플릿 저장] [취소]          [조제 등록]    │
└────────────────────────────────────────────┘
```

#### 3.3.2 직접조제 목록 화면
```
[직접조제 관리]

필터: [전체 ▼] [2024-02-01] ~ [2024-02-29] [검색]

┌────┬──────┬────────┬──────┬──────┬────────┬──────┐
│번호│유형   │조제명    │환자   │약재수 │판매가   │작업   │
├────┼──────┼────────┼──────┼──────┼────────┼──────┤
│ 1  │단품   │홍삼100g │홍길동 │  1   │ 60,000 │[상세] │
│ 2  │맞춤   │감기처방  │김철수 │  8   │120,000 │[재조제]│
│ 3  │OTC   │공진단3환 │비회원 │  3   │ 90,000 │[상세] │
│ 4  │샘플   │시음1일분 │이영희 │  5   │      0 │[상세] │
└────┴──────┴────────┴──────┴──────┴────────┴──────┘
```

### 3.4 데이터 마이그레이션

#### 3.4.1 기존 데이터 정리
```sql
-- formula_id가 NULL인 조제 데이터 업데이트
UPDATE compounds
SET is_custom = 1,
    custom_type = 'custom',
    custom_category = 'SINGLE_ITEM',
    custom_name = (
        SELECT h.herb_name || ' ' || ci.total_grams || 'g'
        FROM compound_ingredients ci
        JOIN herb_items h ON ci.herb_item_id = h.herb_item_id
        WHERE ci.compound_id = compounds.compound_id
        LIMIT 1
    )
WHERE formula_id IS NULL;
```

#### 3.4.2 데이터 검증
- 모든 직접조제 데이터의 무결성 확인
- is_custom 플래그와 formula_id NULL 일치 여부 검증
- custom_category 분류 정확성 확인

## 4. API 설계

### 4.1 직접조제 API

```python
# 직접조제 생성
POST /api/compounds/custom
{
    "patient_id": 1,  # nullable for OTC
    "custom_category": "SINGLE_ITEM",
    "custom_name": "홍삼 100g",
    "custom_purpose": "면역력 증진",
    "ingredients": [
        {
            "herb_item_id": 123,
            "grams": 100,
            "unit_price": 500
        }
    ],
    "dispensing_fee": 10000,
    "sell_price": 60000
}

# 직접조제 템플릿 저장
POST /api/custom-templates
{
    "template_name": "감기 기본방",
    "category": "CUSTOM_FORMULA",
    "ingredients": [...],
    "default_price": 80000
}

# 직접조제 이력 조회
GET /api/compounds/custom?patient_id=1&category=SINGLE_ITEM

# 재조제
POST /api/compounds/{compound_id}/reorder
{
    "patient_id": 1,
    "quantity_multiplier": 1.5  # 1.5배 용량
}
```

## 5. 구현 로드맵

### Phase 1: 기반 구축 (1주)
- [ ] DB 스키마 수정 (custom_category, custom_name 등 추가)
- [ ] 기존 데이터 마이그레이션
- [ ] 직접조제 분류 체계 구현

### Phase 2: 핵심 기능 (2주)
- [ ] 직접조제 생성 UI/API
- [ ] 유형별 입력 폼 구현
- [ ] 가격 자동계산 로직

### Phase 3: 관리 기능 (1주)
- [ ] 직접조제 목록/검색
- [ ] 템플릿 관리
- [ ] 재조제 기능

### Phase 4: 고도화 (2주)
- [ ] 통계 및 리포트
- [ ] 환자별 구매 패턴 분석
- [ ] 인기 직접조제 랭킹

## 6. 주의사항

### 6.1 규제 준수
- 의약품 판매 관련 법규 확인
- 처방전 필요 여부 명확히 구분
- OTC 판매 가능 품목 관리

### 6.2 데이터 정합성
- formula_id NULL과 is_custom=1 일치 유지
- 직접조제는 반드시 custom_category 설정
- 가격 정보 필수 입력

### 6.3 사용자 교육
- 직접조제 유형별 사용 가이드
- 가격 책정 기준 안내
- 템플릿 활용 방법

## 7. 기대 효과

1. **체계적 관리**
   - 직접조제 데이터 일관성 확보
   - 판매 이력 추적 가능

2. **업무 효율성**
   - 템플릿으로 빠른 조제
   - 재조제 간소화

3. **매출 증대**
   - 단품 판매 활성화
   - 맞춤 처방 서비스 확대

4. **고객 만족**
   - 개인 맞춤 서비스
   - 투명한 가격 정책