# 직접조제(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. **고객 만족** - 개인 맞춤 서비스 - 투명한 가격 정책