회원 → 멤버십 선택 (주 1·2회권 + 약정) → 카드 등록
→ PG 호출 (인증·승인) → success
→ Membership 활성화 (creditsRemaining 충전)
→ PaymentLedger 'escrow' 등록 (7일 후 releasable)
→ 회원 확인 화면 + 영수증 이메일
2. 자동 갱신 (정기결제)
cron 갱신 D-7일 → 알림 (푸시·인앱·이메일)
cron D-1일 → 자동결제 시도 (PG)
success → Membership 다음 기간 시작
fail → retry 3회 (24h 간격) → 7일 grace → 자동 해지
3. 포인트 충전
회원 → 충전 단위 선택 (5만/10만/20만)
→ PG 호출 → success → PointBalance 증가
→ 영수증
4. 환불 (중도 해지)
회원 → 해지 신청 → 사유 입력
→ 환불 산출 (미사용 회차 × 정상가)
→ 약관 동의 + 확인
→ PG 환불 API (부분 환불 가능)
→ Refund 생성 + Payment.status='refunded'
→ Membership status='cancelled'
→ 이미 정산된 멘토 분배 → 다음 격주에 회수
5. 청약철회 (7일 이내)
회원 → 7일 이내 + 사용 회차 0
→ PG 전액 환불
→ Membership 즉시 종료
→ 회원 데이터 보관 (5년 — 분쟁 대비)
6. 6h 이내 취소 (= 노쇼)
회원이 6h 이내 취소 → 회차 1 차감
→ 환불 ❌
→ 멘토 정산 정상 진행 (멘토 보호)
7. Pro 인증 멘토 swap 보상
시스템이 Pro 예약을 일반 멘토로 변경
→ 회원 BonusCredit 발급 (1회권)
→ Pro 차감된 포인트 환불
8. 데이터 모델
interfacePayment{id:stringmemberId:stringtype:'membership'|'point'|'trial'amount:numberstatus:'pending'|'paid'|'failed'|'refunded'pgProvider:'toss'|'portone'pgTransactionId:stringpaidAt?:stringrefundedAt?:string}interfacePaymentLedger{id:stringpaymentId:stringstatus:'escrow'|'releasable'|'refunded'|'distributed'releasedAt?:string// 7일 후}interfaceRefund{id:stringpaymentId:stringusedCredits:numberrefundAmount:number// 부분 환불fee:numberreason:stringprocessedAt?:string}