# PharmQ SaaS 구독 서비스 관리 시스템 기획서 ## 1. 프로젝트 개요 ### 1.1 목적 - PharmQ가 제공하는 다양한 서비스에 대한 약국별 구독 관리 - SaaS 형태의 과금 서비스 기반 마련 - 약국별 서비스 이용 현황 실시간 모니터링 ### 1.2 서비스 라인업 1. **클라우드 PC** (Proxmox 기반 가상 데스크톱) 2. **AI CCTV** (인공지능 기반 보안 모니터링) 3. **CRM** (고객 관계 관리 시스템) ## 2. 데이터베이스 스키마 설계 ### 2.1 새로 추가할 테이블 #### 2.1.1 `service_products` - 서비스 상품 마스터 ```sql 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` - 약국별 구독 현황 ```sql 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` - 서비스 이용 로그 ```sql 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` - 결제 이력 ```sql 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주) - [x] 데이터베이스 스키마 생성 - [ ] 기본 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