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

9.0 KiB
Raw Blame History

한약 판매 관리 시스템 기획 문서

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 테이블 수정사항

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 (판매 거래)

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 (가격 정책)

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 (판매 상태 이력)

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

# 판매 상태 업데이트
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. 의사결정 지원

    • 데이터 기반 가격 정책 수립
    • 인기 처방 파악 및 재고 관리 최적화