kdrug-inventory-system/docs/판매관리_기획문서.md
시골약사 f3f1efd8c2 feat: 판매관리 시스템 Phase 1 및 마일리지 시스템 구현
- 판매 관리 기능 추가
  - 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>
2026-02-18 05:42:29 +00:00

298 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 한약 판매 관리 시스템 기획 문서
## 1. 개요
### 1.1 배경
- 한약사가 조제한 한약은 재고 차감과 별개로 판매 프로세스를 거쳐야 함
- 조제 완료 후 판매 상태 관리 및 가격 책정이 필요
- 환자 관리 및 마케팅을 위한 카카오 채널 연동 계획
### 1.2 목적
- 조제된 한약의 판매 상태 관리
- 유연한 가격 정책 적용
- 판매 이력 추적 및 매출 관리
- 환자 정보 연계 강화
## 2. 현재 시스템 분석
### 2.1 기존 구조
```
compounds 테이블:
- compound_id: 조제 고유번호
- status: 현재 'PREPARED'로 고정
- sell_price_total: 판매가격 필드 존재하나 미활용
- cost_total: 원가 필드 존재
```
### 2.2 현재 문제점
- 조제 후 판매 상태 추적 불가
- 가격 정책 유연성 부족
- 판매 완료/취소/반품 등 프로세스 미비
- 매출 통계 기능 없음
## 3. 기능 요구사항
### 3.1 판매 상태 관리
#### 3.1.1 상태 유형
```
PREPARED (조제완료) → 현재 기본값
PENDING_PAYMENT (결제대기)
PAID (결제완료)
PENDING_DELIVERY (배송대기)
DELIVERED (배송완료)
COMPLETED (판매완료)
OTC_CONVERTED (OTC전환)
CANCELLED (취소)
REFUNDED (환불)
```
#### 3.1.2 상태 전이 규칙
```
조제완료 → 결제대기 → 결제완료 → 배송대기 → 배송완료 → 판매완료
↓ ↓
OTC전환 취소/환불
```
### 3.2 가격 관리
#### 3.2.1 가격 정책
1. **기본가격 산정**
- 표준처방: 처방별 기본가격 테이블 참조
- 직접조제: 약재별 단가 × 용량 × 첩수 자동 계산
2. **가격 조정**
- 가감방 적용시 자동 재계산
- 수동 가격 조정 가능
- 할인율 적용 기능
3. **가격 구성**
```
약재원가 + 조제료 + 배송비 = 기본가격
기본가격 × (1 - 할인율) = 최종판매가
```
### 3.3 판매 처리 기능
#### 3.3.1 판매 정보 입력
- 결제 방법 (현금/카드/계좌이체/카카오페이)
- 결제 일시
- 실제 판매가격
- 할인 사유 및 금액
- 배송 정보 (택배/직접수령/퀵서비스)
- 영수증 발행 여부
#### 3.3.2 OTC 전환
- 처방전 없이 판매 가능한 경우
- 환자 정보 없이도 판매 처리
- 별도 재고 관리 필요
## 4. 데이터베이스 설계
### 4.1 기존 테이블 수정
#### compounds 테이블 수정사항
```sql
ALTER TABLE compounds ADD COLUMN payment_method TEXT;
ALTER TABLE compounds ADD COLUMN payment_date DATETIME;
ALTER TABLE compounds ADD COLUMN discount_rate REAL DEFAULT 0;
ALTER TABLE compounds ADD COLUMN discount_reason TEXT;
ALTER TABLE compounds ADD COLUMN delivery_method TEXT;
ALTER TABLE compounds ADD COLUMN delivery_date DATETIME;
ALTER TABLE compounds ADD COLUMN invoice_number TEXT;
```
### 4.2 신규 테이블
#### sales_transactions (판매 거래)
```sql
CREATE TABLE sales_transactions (
transaction_id INTEGER PRIMARY KEY AUTOINCREMENT,
compound_id INTEGER REFERENCES compounds(compound_id),
transaction_date DATETIME NOT NULL,
transaction_type TEXT NOT NULL, -- SALE, REFUND, CANCEL
amount REAL NOT NULL,
payment_method TEXT,
payment_status TEXT, -- PENDING, COMPLETED, FAILED
notes TEXT,
created_by TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
#### price_policies (가격 정책)
```sql
CREATE TABLE price_policies (
policy_id INTEGER PRIMARY KEY AUTOINCREMENT,
formula_id INTEGER REFERENCES formulas(formula_id),
base_price REAL NOT NULL,
dispensing_fee REAL DEFAULT 0,
is_active BOOLEAN DEFAULT 1,
effective_date DATE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
#### sales_status_history (판매 상태 이력)
```sql
CREATE TABLE sales_status_history (
history_id INTEGER PRIMARY KEY AUTOINCREMENT,
compound_id INTEGER REFERENCES compounds(compound_id),
old_status TEXT,
new_status TEXT NOT NULL,
changed_by TEXT,
change_reason TEXT,
changed_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
## 5. 사용자 인터페이스
### 5.1 판매 관리 화면
#### 5.1.1 조제 목록 화면 개선
```
[조제 목록]
┌────┬──────┬──────┬────────┬────────┬────────┬──────────┐
│번호│환자명│처방명│조제일자│ 상태 │판매가격│ 작업 │
├────┼──────┼──────┼────────┼────────┼────────┼──────────┤
│ 1 │홍길동│갈근탕│02-18 │조제완료│ 80,000 │[판매처리]│
│ 2 │김철수│쌍화탕│02-18 │결제대기│ 60,000 │[결제확인]│
│ 3 │이영희│십전대│02-17 │배송대기│120,000 │[배송처리]│
└────┴──────┴──────┴────────┴────────┴────────┴──────────┘
```
#### 5.1.2 판매 처리 모달
```
┌─────────────── 판매 처리 ──────────────┐
│ │
│ 처방명: 갈근탕 │
│ 환자명: 홍길동 │
│ 조제일: 2026-02-18 │
│ │
│ ─────── 가격 정보 ───────── │
│ 약재원가: 45,000원 │
│ 조제료: 20,000원 │
│ 기본가격: 65,000원 │
│ │
│ 할인율: [10%▼] │
│ 할인사유: [_______________] │
│ 최종가격: 58,500원 │
│ │
│ ─────── 결제 정보 ───────── │
│ 결제방법: [카드▼] │
│ 결제일시: [2026-02-18 14:30] │
│ │
│ ─────── 배송 정보 ───────── │
│ 배송방법: [택배▼] │
│ 배송예정: [2026-02-19] │
│ │
│ [취소] [판매확정] │
└─────────────────────────────────────────┘
```
### 5.2 매출 통계 화면
```
[매출 현황]
기간: [2026-02-01] ~ [2026-02-29]
┌─────────────────────────────────┐
│ 총 매출: 3,540,000원 │
│ 총 건수: 42건 │
│ 평균 단가: 84,286원 │
└─────────────────────────────────┘
[일별 매출 추이 그래프]
[처방별 매출 비중 차트]
[결제 방법별 통계]
```
## 6. API 설계
### 6.1 판매 관련 API
```python
# 판매 상태 업데이트
POST /api/compounds/{compound_id}/status
{
"status": "PAID",
"payment_method": "CARD",
"payment_date": "2026-02-18T14:30:00",
"amount": 58500
}
# 가격 조정
PUT /api/compounds/{compound_id}/price
{
"sell_price_total": 58500,
"discount_rate": 10,
"discount_reason": "단골 할인"
}
# 판매 통계 조회
GET /api/sales/statistics?start_date=2026-02-01&end_date=2026-02-29
# OTC 전환
POST /api/compounds/{compound_id}/convert-to-otc
{
"reason": "처방전 미제출",
"notes": "환자 요청"
}
```
## 7. 구현 우선순위
### Phase 1 (1주차)
1. compounds 테이블 칼럼 추가
2. 판매 상태 변경 기능
3. 기본 가격 입력/수정 기능
4. 판매 처리 UI 구현
### Phase 2 (2주차)
1. sales_transactions 테이블 생성
2. 판매 이력 관리 기능
3. 매출 통계 API
4. 통계 화면 구현
### Phase 3 (3주차)
1. 가격 정책 테이블 구현
2. 자동 가격 계산 로직
3. OTC 전환 기능
4. 영수증 발행 기능
## 8. 추후 확장 계획
### 8.1 카카오 채널 연동
- QR 코드 생성 및 출력
- 카카오 회원가입 유도
- 알림톡 발송 (조제완료, 배송안내)
### 8.2 고객 관리
- 구매 이력 관리
- 재구매 주기 분석
- 맞춤 처방 추천
### 8.3 재고 연계
- OTC 전환시 별도 재고 관리
- 유통기한 관리
- 재고 부족 알림
## 9. 기대 효과
1. **업무 효율성 향상**
- 조제부터 판매까지 일원화된 관리
- 자동 가격 계산으로 실수 방지
2. **매출 관리 개선**
- 실시간 매출 현황 파악
- 처방별/기간별 분석 가능
3. **고객 서비스 향상**
- 체계적인 배송 관리
- 투명한 가격 정책
4. **의사결정 지원**
- 데이터 기반 가격 정책 수립
- 인기 처방 파악 및 재고 관리 최적화