📋 기획 및 설계: - PharmQ SaaS 서비스 기획서 작성 - 구독 서비스 라인업 정의 (클라우드PC, AI CCTV, CRM) - DB 스키마 설계 및 API 아키텍처 설계 🗄️ 데이터베이스 구조: - service_products: 서비스 상품 마스터 테이블 - pharmacy_subscriptions: 약국별 구독 현황 테이블 - subscription_usage_logs: 서비스 이용 로그 테이블 - billing_history: 결제 이력 테이블 - 샘플 데이터 자동 생성 (21개 구독, 월 118만원 매출) 🔧 백엔드 API 구현: - 구독 현황 통계 API (/api/subscriptions/stats) - 약국별 구독 조회 API (/api/pharmacies/subscriptions) - 구독 상세 정보 API (/api/pharmacy/{id}/subscriptions) - 구독 생성/해지 API (/api/subscriptions) 🖥️ 프론트엔드 UI 구현: - 대시보드 구독 현황 카드 (월 매출, 구독 수, 구독률 등) - 약국 목록에 구독 상태 아이콘 및 월 구독료 표시 - 약국 상세 페이지 구독 서비스 섹션 추가 - 실시간 구독 생성/해지 기능 구현 ✨ 주요 특징: - 서비스별 색상 코딩 및 이모지 아이콘 시스템 - 실시간 업데이트 (구독 생성/해지 즉시 반영) - 반응형 디자인 (모바일/태블릿 최적화) - 툴팁 기반 상세 정보 표시 📊 현재 구독 현황: - 총 월 매출: ₩1,180,000 - 구독 약국: 10/14개 (71.4%) - AI CCTV: 6개 약국, CRM: 10개 약국, 클라우드PC: 5개 약국 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
13 KiB
13 KiB
PharmQ SaaS 구독 서비스 관리 시스템 기획서
1. 프로젝트 개요
1.1 목적
- PharmQ가 제공하는 다양한 서비스에 대한 약국별 구독 관리
- SaaS 형태의 과금 서비스 기반 마련
- 약국별 서비스 이용 현황 실시간 모니터링
1.2 서비스 라인업
- 클라우드 PC (Proxmox 기반 가상 데스크톱)
- AI CCTV (인공지능 기반 보안 모니터링)
- CRM (고객 관계 관리 시스템)
2. 데이터베이스 스키마 설계
2.1 새로 추가할 테이블
2.1.1 service_products - 서비스 상품 마스터
CREATE TABLE service_products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
product_code VARCHAR(20) UNIQUE NOT NULL, -- 'CLOUD_PC', 'AI_CCTV', 'CRM'
product_name VARCHAR(100) NOT NULL, -- '클라우드 PC', 'AI CCTV', 'CRM'
description TEXT, -- 서비스 상세 설명
monthly_price DECIMAL(10,2) NOT NULL, -- 월 구독료
setup_fee DECIMAL(10,2) DEFAULT 0, -- 초기 설치비
is_active BOOLEAN DEFAULT TRUE, -- 서비스 활성화 여부
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2.1.2 pharmacy_subscriptions - 약국별 구독 현황
CREATE TABLE pharmacy_subscriptions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pharmacy_id INTEGER NOT NULL, -- pharmacy_info.id 참조
product_id INTEGER NOT NULL, -- service_products.id 참조
subscription_status VARCHAR(20) NOT NULL, -- 'ACTIVE', 'SUSPENDED', 'CANCELLED'
start_date DATE NOT NULL, -- 구독 시작일
end_date DATE, -- 구독 종료일 (NULL이면 무제한)
next_billing_date DATE, -- 다음 결제일
monthly_fee DECIMAL(10,2) NOT NULL, -- 실제 적용 월 구독료
notes TEXT, -- 특이사항
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (pharmacy_id) REFERENCES pharmacy_info(id),
FOREIGN KEY (product_id) REFERENCES service_products(id),
UNIQUE(pharmacy_id, product_id) -- 약국-상품당 하나의 구독만
);
2.1.3 subscription_usage_logs - 서비스 이용 로그
CREATE TABLE subscription_usage_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
subscription_id INTEGER NOT NULL, -- pharmacy_subscriptions.id 참조
usage_type VARCHAR(50) NOT NULL, -- 'LOGIN', 'API_CALL', 'STORAGE_USE' 등
usage_amount INTEGER DEFAULT 1, -- 사용량 (로그인 횟수, API 호출 수 등)
usage_date DATE NOT NULL, -- 사용일
metadata JSON, -- 추가 메타데이터
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (subscription_id) REFERENCES pharmacy_subscriptions(id)
);
2.1.4 billing_history - 결제 이력
CREATE TABLE billing_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
subscription_id INTEGER NOT NULL, -- pharmacy_subscriptions.id 참조
billing_period_start DATE NOT NULL, -- 과금 기간 시작
billing_period_end DATE NOT NULL, -- 과금 기간 종료
amount DECIMAL(10,2) NOT NULL, -- 청구 금액
billing_status VARCHAR(20) NOT NULL, -- 'PENDING', 'PAID', 'OVERDUE', 'CANCELLED'
billing_date DATE, -- 실제 결제일
payment_method VARCHAR(50), -- 결제 수단
invoice_number VARCHAR(100), -- 청구서 번호
notes TEXT, -- 결제 관련 메모
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (subscription_id) REFERENCES pharmacy_subscriptions(id)
);
2.2 기존 테이블 연동
pharmacy_info테이블과pharmacy_subscriptions테이블을 연결- 사용자 관리에서 약국별 구독 서비스 현황 표시
3. 프론트엔드 UI/UX 설계
3.1 대시보드 개선
3.1.1 메인 대시보드 (/)
- 구독 서비스 현황 카드 추가
┌─────────────────────────────────────────┐ │ 📊 구독 서비스 현황 │ ├─────────────────────────────────────────┤ │ 클라우드 PC │ 12/14 약국 (85.7%) │ │ AI CCTV │ 8/14 약국 (57.1%) │ │ CRM │ 10/14 약국 (71.4%) │ ├─────────────────────────────────────────┤ │ 총 월 매출 │ ₩2,450,000 │ └─────────────────────────────────────────┘
3.1.2 서비스별 상태 인디케이터
- 각 서비스별 색상 코드 적용
- 🟢 클라우드 PC (녹색)
- 🔵 AI CCTV (파란색)
- 🟡 CRM (노란색)
3.2 약국 관리 페이지 개선 (/pharmacy)
3.2.1 약국 목록에 구독 상태 표시
┌─────────────────────────────────────────────────────────────────┐
│ 약국명 │ 위치 │ 구독 서비스 │ 월 구독료 │ 액션 │
├─────────────────────────────────────────────────────────────────┤
│ 서울약국 │ 서울 강남구 │ 🟢 💻 🔵 📷 🟡 📊 │ ₩180,000 │ ⚙️ │
│ 부산약국 │ 부산 해운대 │ 🟢 💻 🔵 📷 │ ₩120,000 │ ⚙️ │
│ 대구약국 │ 대구 중구 │ 🟢 💻 │ ₩60,000 │ ⚙️ │
└─────────────────────────────────────────────────────────────────┘
3.2.2 약국 상세 페이지 구독 탭 추가
- 기존: 기본정보, 네트워크정보, 연결된 머신
- 신규: 구독 서비스 탭 추가
┌─────────────────────────────────────────────────────────────────┐
│ [기본정보] [네트워크정보] [연결된 머신] [구독 서비스] ←← 신규 탭 │
├─────────────────────────────────────────────────────────────────┤
│ 📦 구독 중인 서비스 │
│ │
│ 🟢 클라우드 PC ₩60,000/월 [관리] │
│ ├─ 구독기간: 2024.01.15 ~ 무제한 │
│ ├─ 다음결제: 2025.10.15 │
│ └─ 상태: 정상 (ACTIVE) │
│ │
│ 🔵 AI CCTV ₩80,000/월 [관리] │
│ ├─ 구독기간: 2024.03.01 ~ 무제한 │
│ ├─ 다음결제: 2025.10.01 │
│ └─ 상태: 정상 (ACTIVE) │
│ │
│ 📦 구독 가능한 서비스 │
│ │
│ 🟡 CRM 시스템 ₩40,000/월 [가입] │
│ └─ 고객 관계 관리 및 매출 분석 도구 │
│ │
│ [+ 새 서비스 구독하기] │
└─────────────────────────────────────────────────────────────────┘
3.3 새로운 메뉴 추가
3.3.1 사이드바 메뉴 구조 개선
PharmQ Super Admin (PSA)
├── 📊 대시보드
├── 🏥 약국 관리
├── 👥 PQON 사용자 관리
├── 💻 머신 관리
├── 🖥️ VM 관리 (VNC)
├── 📦 구독 서비스 관리 ←← 신규 메뉴
│ ├── 구독 현황 조회
│ ├── 서비스 상품 관리
│ ├── 결제 이력 조회
│ └── 사용량 통계
├── 📈 매출 대시보드 ←← 신규 메뉴
└── 🔗 Medivault
3.3.2 구독 서비스 관리 페이지 (/subscriptions)
- 전체 구독 현황 테이블
- 서비스별 필터링
- 구독 상태별 필터링 (활성/일시정지/해지)
- 월별 매출 차트
3.3.3 매출 대시보드 (/revenue)
- 월별 매출 트렌드
- 서비스별 매출 비중
- 약국별 구독료 순위
- 신규 구독/해지 통계
4. API 설계
4.1 구독 관리 API
4.1.1 구독 현황 조회
GET /api/subscriptions
GET /api/subscriptions/pharmacy/{pharmacy_id}
GET /api/subscriptions/product/{product_code}
4.1.2 구독 생성/수정
POST /api/subscriptions # 새 구독 생성
PUT /api/subscriptions/{subscription_id} # 구독 정보 수정
DELETE /api/subscriptions/{subscription_id} # 구독 해지
4.1.3 서비스 상품 관리
GET /api/products # 상품 목록
POST /api/products # 상품 등록
PUT /api/products/{product_id} # 상품 수정
4.2 결제 및 통계 API
4.2.1 결제 관련
GET /api/billing/history/{subscription_id} # 결제 이력
POST /api/billing/invoice # 청구서 생성
PUT /api/billing/{billing_id}/status # 결제 상태 업데이트
4.2.2 통계 및 리포트
GET /api/analytics/revenue/monthly # 월별 매출
GET /api/analytics/subscriptions/summary # 구독 요약
GET /api/analytics/usage/{subscription_id} # 서비스 사용량
5. 구현 단계별 로드맵
Phase 1: 기본 구조 구축 (1-2주)
- 데이터베이스 스키마 생성
- 기본 API 엔드포인트 구현
- 대시보드 구독 현황 카드 추가
Phase 2: 약국별 구독 관리 (2-3주)
- 약국 상세 페이지 구독 탭 추가
- 구독 생성/수정/해지 기능
- 약국 목록 구독 상태 표시
Phase 3: 서비스 관리 및 통계 (3-4주)
- 구독 서비스 관리 메뉴 구현
- 매출 대시보드 구현
- 사용량 로깅 시스템
Phase 4: 과금 시스템 (4-6주)
- 자동 결제 시스템
- 청구서 생성
- 결제 연동 (포트원/토스페이먼츠 등)
6. 기술 스택
6.1 백엔드
- Database: SQLite (개발) → PostgreSQL (운영)
- API: Flask REST API
- 결제: 포트원(PortOne) 또는 토스페이먼츠
6.2 프론트엔드
- Framework: Bootstrap 5 + Jinja2
- Charts: Chart.js 또는 D3.js
- Icons: Font Awesome
6.3 모니터링
- 사용량 추적: Custom logging system
- 알림: 결제 실패, 구독 만료 등
7. 보안 및 컴플라이언스
7.1 데이터 보안
- 결제 정보 암호화
- 개인정보 보호법 준수
- API 인증/인가 체계
7.2 백업 및 복구
- 데이터베이스 일일 백업
- 결제 데이터 별도 보관
- 장애 복구 프로세스
8. 예상 효과
8.1 비즈니스 효과
- 매출 가시화: 실시간 구독 매출 현황 파악
- 고객 관리: 약국별 서비스 이용 패턴 분석
- 확장성: 새로운 서비스 추가 용이
8.2 운영 효율화
- 자동화: 구독/해지/결제 프로세스 자동화
- 모니터링: 서비스별 이용 현황 실시간 추적
- 리포팅: 월별/분기별 매출 리포트 자동 생성
작성일: 2025년 9월 11일
작성자: PharmQ Development Team
버전: v1.0