- 판매 관리 기능 추가 - compounds 테이블에 판매 관련 컬럼 추가 (payment_method, discount_rate, delivery_method 등) - 판매 상태 관리 (조제완료→결제대기→결제완료→배송대기→배송완료) - 판매 처리 모달 UI 구현 - 9가지 상태별 뱃지 표시 - 마일리지 시스템 구축 - patients 테이블에 마일리지 컬럼 추가 (balance, earned, used) - mileage_transactions 테이블 생성 (거래 이력 관리) - 마일리지 사용/적립 기능 구현 - 복합 결제 기능 - 할인율(%) / 할인액(원) 직접 입력 선택 가능 - 마일리지 + 현금 + 카드 + 계좌이체 복합 결제 - 결제 금액 자동 검증 - 결제 방법 자동 분류 (복합결제 지원) - API 엔드포인트 추가 - POST /api/compounds/<id>/status (상태 업데이트) - PUT /api/compounds/<id>/price (가격 조정) - GET /api/sales/statistics (판매 통계) - 데이터베이스 설정 통합 - config.py 생성하여 DB 경로 중앙화 TODO: 처방별 기본가격 정책 시스템 (price_policies 테이블 활용) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
9.9 KiB
9.9 KiB
직접조제(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 문제점
-
분류 체계 미비
- 직접조제임에도 is_custom=0으로 저장
- custom_type이 'standard'로 잘못 설정
- 표준처방과 직접조제 구분 불명확
-
데이터 무결성
- formula_id NULL이지만 custom 플래그 미설정
- 직접조제 사유/목적 미기록
- 처방명 없음 (custom_summary 미사용)
-
관리 기능 부족
- 직접조제 이력 추적 어려움
- 가격 책정 기준 불명확
- 재조제시 참조 데이터 부재
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 테이블 수정
-- 직접조제 분류 강화
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 테이블 신규
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 직접조제 관리 기능
-
템플릿 관리
- 자주 사용하는 직접조제 템플릿 저장
- 템플릿에서 빠른 조제 생성
-
이력 관리
- 환자별 직접조제 이력 조회
- 동일 처방 재조제 기능
-
가격 정책
- 직접조제 유형별 조제료 설정
- 단품 판매 마진율 관리
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 기존 데이터 정리
-- 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
# 직접조제 생성
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. 기대 효과
-
체계적 관리
- 직접조제 데이터 일관성 확보
- 판매 이력 추적 가능
-
업무 효율성
- 템플릿으로 빠른 조제
- 재조제 간소화
-
매출 증대
- 단품 판매 활성화
- 맞춤 처방 서비스 확대
-
고객 만족
- 개인 맞춤 서비스
- 투명한 가격 정책