---
title: "🏗️ 달록 충전식 가격·결제 작업설계서 v1 (CC↔Codex 5라운드 수렴)"
category: "plan"
document_type: "작업설계서"
source_status: "generated"
knowledge_group: "00_current_state"
priority: "High"
purpose: "달록 코치 AI의 충전식(달록 크레딧) 가격·결제 정책을 구현 단위로 분해한 작업설계서. 기획안(정책 확정)을 CC↔Codex 5라운드 적대적 교차검증으로 다듬어 '구현 착수 가능(Go)'까지 끌어올린 결과. B-라이트 2공개+1히든 가격, 일일 할당=사용자 자유·책임 차감모델, 충전금=선수금 분리회계, 만료없음·환불, 무료 세션형 부스트, AI 원가 레버, 신규 스키마/RPC/UI/어드민 범위, 법무·회계 산출물, 사장님 확인 필요 항목을 비개발 해설과 함께 시각화. 사장님 원격 검수용. 실제 코드는 별도 구현 스레드가 본 설계서로 작업."
read_when: ["가격정책","결제","충전식","구독관리","작업설계서","코치AI","로드맵","어드민","수익화"]
updated: "2026-06-10"
work_timestamp: "20260610_182429"
context: "달록본레포CC (D:\\dallog\\dallog_git) — 가격정책 기획안 1차 컨펌 진행 중 사장님 부재(퇴근). 부재중 위임: Codex 충분한 검수 루프 + 작업설계서를 MD+KB시각문서로 발행. CC↔Codex R1~R5(No-go 2회 거쳐 Go) 수렴 결과."
source_of_truth: "https://dallog-tools.hansbridge.co.kr/knowledge/"
---

# 🏗️ 달록 충전식 가격·결제 작업설계서 v1

> **이 문서는 무엇인가** — "달록 크레딧(충전식)으로 코치 AI를 결제·사용"하는 구조를 **실제로 어떻게 만들지** 적은 설계서입니다. 가격·정책을 정하는 *기획안*은 따로 있고, 이건 그 위에서 **개발자가 그대로 짤 수 있게** 분해한 빌드 명세입니다.
>
> **현 단계** — 6단계 워크플로 중 **⑤ 작업설계서 완료**. CC(Claude Code)↔Codex 5라운드 검수로 "구현 착수 가능(Go)"까지 수렴. **사장님 최종 검수 후 ⑥ 새 스레드에서 코드 작업** 시작.

---

## 0. 한눈에 — 진행 단계

```mermaid
flowchart LR
    A["① 기획안"] --> B["② 시각화"] --> C["③ 1차 컨펌<br/>(의견서 반영)"]
    C --> D["④ Codex 검수<br/>R1~R5 ✅"] --> E["⑤ 작업설계서<br/>(현재·완료)"]
    E --> F["⑥ 새 스레드<br/>구현"]
    style E fill:#0c7d8c,color:#fff
    style F fill:#eee,color:#333,stroke-dasharray: 4 4
```

**평어 해설** — 지금은 ⑤번(설계서)까지 끝났습니다. 사장님이 이 문서를 보시고 "오케이"만 주시면, 다른 대화창(새 스레드)이 이 설계서대로 실제 코드를 짭니다.

---

## 1. 🤝 Codex 5라운드 검수 — 이 설계가 믿을 만한 근거

단일 AI의 자기확신이 아니라, **CC가 짜고 Codex가 적대적으로 반박**해 걸러낸 결과입니다.

| 라운드 | 대상 | Codex 판정 | 무엇을 잡았나 |
|---|---|:---:|---|
| R1 | 기획안 | Go-with-fixes | 단발 환율 산식 오류, 충전금 원장이 현 스키마에 없음 등 13건 |
| R2 | 작업설계서 | **No-go** | 매출뷰 부호, 재시드 누락, hidden 미정의, RLS 충돌 등 12건 |
| R3 | 작업설계서 | Go-with-fixes | 단발 used 규칙·일캡/방캡 동시도달 등 미결 |
| R4 | 작업설계서 | **No-go** | 할증 가중치 미정의, 자동충전 무한루프, 환불 산식 등 18건 |
| R5 | 작업설계서 | **✅ Go** | 9개 설계 결정 모두 닫힘, 구현 착수 가능 |

**평어 해설** — No-go가 두 번 나왔다는 건 검수가 형식적이지 않았다는 뜻입니다. 그 지적들을 다 반영해 마지막 R5에서 "이제 개발자가 막힘없이 짤 수 있다(Go)"가 나왔습니다.

---

## 2. 💳 확정 가격·플랜 (VAT 포함 · 원화 · 웹충전 기준)

구조 = **B-라이트** — 공개 플랜 2개(선택 부담 ↓) + 숨은 고가 플랜 1개(비교 기준·큰손).

| 플랜 | 표시가 | 하루 제공 | 한 달 한도 | 한 방 최대 턴 | 도구 호출 상한 |
|---|---:|---:|---:|---:|---:|
| 무료 | **0원** | 2회/일 + 가입 부스트 | 베타 60 / 정식 50 | 10 | 5 |
| 1단계 | **5,900** | 15회/일 | 450 | 20 | 8 |
| 2단계 (주력) | **9,900** | 30회/일 | 900 | 25 | 8 |
| 히든 (숨김) | **24,900** | 60회/일 | 1,800 | 25 | 8 |

- **단발 이용권 = 1회 150원** (충전금에서 차감, 묶음권 없음).
- 히든 방당30 버전(25,900)은 운영자 초대용.
- 스토어 가격(앱)은 숨김 — 웹가 ÷0.7 후 ,900원 올림으로 별도 책정.

> **💡 "왜 평균 사용자 기준으로 가격을 잡나"** — 초기 서비스가 죽는 이유는 "한 건당 손해"가 아니라 "아무도 안 써서"입니다. 그래서 **평균 사용자가 흑자 나게 가격을 잡고, 과하게 쓰는 사람은 가격이 아니라 구조(턴 상한·단발)로 막습니다.** 환율도 2,000원까지(IMF급) 막으려 하지 않고 1,750원 방어선으로 둡니다.

### 마진 검증 (환율 1,750원 기준, "제공량 100% 사용" 가정)

| 플랜 | 평균 사용 | 헤비(매일 풀) | 캡내 최악(전부 장문·환율1,800) |
|---|---:|---:|---:|
| 1단계 | +3,843 ✅ | +1,772 ✅ | +1,043 ✅ |
| 2단계 | +6,020 ✅ | +1,878 ✅ | −1,038 △ |
| 히든 | +16,513 ✅ | +8,229 ✅ | −519 △ |

> **△ 의 의미** — "모든 대화를 끝까지 장문으로만, 환율도 1,800원"이라는 비현실적 극단에서만 2단계·히든이 살짝 적자. 이건 **베타 한정 허용**이고, 정식 전환 때 재검토합니다(트리거: 캡내최악 사용자 3% 초과 OR 월 AI원가/실수령 35% 초과 OR 환율 1,800원 7일 지속).

---

## 3. ⚙️ 차감 모델 — 사장님 확정 원칙

**핵심 원칙** — 하루 할당량 안에서는 **사용자 자유·책임**으로 씁니다. 다 쓰면 그때 단발을 물어봅니다.

```mermaid
flowchart TD
    S["대화 1턴 요청"] --> M{"월 한도<br/>남았나?"}
    M -- "아니오" --> UP["업셀 / 충전 안내"]
    M -- "예" --> D{"오늘 할당<br/>남았나?"}
    D -- "예(방당캡 이내)" --> N["정상 — 할당 1 차감"]
    D -- "예(방당캡 초과)" --> H["할증 — 할당 가중 소모(2배)<br/>= 비경제적 사용(자유)"]
    D -- "아니오(소진)" --> ASK{"단발 의사?<br/>150원/회"}
    ASK -- "확인" --> PAY["충전금 150원 차감 · 계속"]
    ASK -- "취소" --> STOP["중단"]
    style H fill:#fdf3e7
    style PAY fill:#e8f8f1
```

- **방당 턴캡 준수(경제적)** = 짧은 방, 1턴=1차감.
- **방당 턴캡 초과(비경제적)** = 할증 = 하루 할당을 **더 빨리 소모**(별도 돈 안 나감). 얼마나? CC↔Codex 토큰 시뮬레이션 수렴 결과, 긴 대화의 한 턴은 평균 턴의 **1.7~1.8배** 비용이라(매 턴 이전 대화 전체를 다시 읽어서), 연장 깊이에 따라 **1.2배→2.0배 누적**으로 할당을 깎습니다. (정액 35원안은 실비 대비 과해서 제외 — 베타 실측으로 배수 최종 보정.)
- **하루 할당 소진 = "끝"** → 단발 150원 의사를 물음(확인/취소). 단발 턴은 충전금만 차감.

> **💡 할증과 단발의 차이** — 할증은 "공짜 하루 할당을 더 빨리 쓰는 것"(돈 안 나감), 단발은 "하루 할당 다 쓴 뒤 진짜 돈 150원으로 잇는 것"입니다. **둘은 순서지 동시에 일어나지 않습니다.**

### 단발 이용권 안내 UX (무료·유료 공통)
- 하루 할당 소진 후 단발 차감 직전 **"이후 1회당 150원 차감" 안내 + [확인/취소]**.
- **자동적용 on/off (기본 OFF)** — ON이면 안내 없이 자동 차감(법적 사전고지 필요), OFF면 매번 확인(대화방 단위 1회 동의 → 그 방 자동).
- **단발 지출 충전금 누계 실시간 표시** UI.

---

## 4. 🧾 충전금 회계 — "맡은 돈"과 "번 돈"을 가른다

> **💡 카페 선불충전과 같습니다** — 충전한 돈은 아직 서비스를 안 받았으니 **"맡아둔 돈(선수금·부채)"**이고, 실제로 대화(차감)할 때마다 그만큼만 **"번 돈(매출)"**이 됩니다.

| 항목 | 성격 |
|---|---|
| 충전(입금) | 맡은 돈 — 매출 아님 |
| 플랜료·단발·할증 차감 | 번 돈(매출) |
| 미사용 잔액 | 갚아야 할 돈(부채) = **환불 대상** |
| VIP·이벤트 제공 쿠폰 | 공짜 판촉(매출 0) = **환불 제외**, 유효기간 있음 |

- **만료 없음** (무기한). 종료 시 전액 환불 약관 + 미사용 총액은 항상 환불 가능한 현금으로 확보(별도 통장 권고).
- **환불계좌 = 자율 선택 등록** (강제·차단 안 함).
- 어드민·애널리틱스에 🅰 맡은 돈(미귀속) / 🅱 번 돈(귀속) / 🅒 제공쿠폰(매출0) **분리 표시**.
- 제공 쿠폰 유효기간 = (쿠폰÷쿠폰 이하 최고 플랜 월정가, 일할) + 30일. 예) 5만원→91일, 3만원→67일, 1만원→61일.

---

## 5. 🎁 무료 온보딩 · 전환 · 어뷰징

- **무료 부스트(별도 quota)** — 가입 후 7일 OR 첫 3개 코칭세션 중 먼저 도달까지 세션당 5턴 → 이후 하루 2회. (부스트는 하루 2회를 까먹지 않는 별도 quota.)
- **전환 동선** — 가격표 들이밀지 않고 사용 흐름 속에서: 기본 버튼 `월 플랜으로 계속` / 보조 `이번 대화만 150원`.
- **어뷰징 방어** — 베타: 기기 단위 부스트 1회 + 로깅 + 다계정은 차단 아닌 "부스트 제외". 정식 전: 위험점수 + 재획득 쿨다운. **과방어 금지**(고사용 무료자는 우량 잠재고객일 수도).

---

## 6. 🧰 AI 원가 레버 (마진·무료 방어)

1. **Gemini 2.5 Flash-Lite 라우팅** — 인사·단순조회는 싼 모델, **통증·부상·과훈련·기록분석은 정확한 Flash**(기본 Flash, Lite는 화이트리스트만 + 건강 오분류 방지 테스트). 평균원가 약 74% 절감. 가격표는 안전하게 Flash 기준 유지.
2. **무료 총량 월 하드캡** — 무상한이면 1,000명에 월 74만원 → 월캡으로 반감.
3. **도구턴 가중차감** — 도구 많이 쓴 무거운 대화는 일반 ~3회로 차감.
4. **출력 길이 상한 + 묶음처리(Batch)** — 주간·월간 리포트 원가 50% 절감(실시간 대화엔 미적용).
5. **★주입 효율화 (사장님 지적 — 최대 절감 레버)** — 지금은 매 대화 턴마다 "최근 14일 운동데이터"를 통째로 다시 보내는데(낭비라 캐시도 안 먹음), ① 한 대화방 안에선 한 번 만든 걸 재사용(캐시 적중↑) + ② 새 대화방은 무거운 14일 블록 대신 **"초압축 요약 5~8줄"로 시작하고 데이터 질문이 나올 때만 풀 블록**을 부르도록 고칩니다. CC↔Codex 추산 **입력 비용 35~60% 절감**. (단 가격 인하 근거로 미리 쓰지 않고, 효율화+베타 실측 후 할증·가격 재계산 — 안전마진.)

---

## 7. 🛠️ 구현 범위 (새 스레드가 만들 것)

> 아래는 "지금 코드에 없어서 새로 만들" 목록입니다. 설계는 끝났고, 만드는 일이 ⑥단계입니다.

| # | 작업 | 검증 기준 |
|---|---|---|
| W1 | 플랜표 재설계·재시드(신가/캡/hidden, tier3 은퇴) | 4행 신가·캡 확인 |
| W2 | 충전금 지갑·원장(선수금/매출 분리) | 충전→차감→환불 잔액·매출 정합 |
| W3 | 일/월/방/할증 차감 RPC(우선순위·원자성) | 5케이스 단위테스트 |
| W4 | 쿠폰 부여·소진·만료 | 우선소진·유효기간·매출0 |
| W5 | 무료 세션형 부스트 | 7일/3세션/세션5턴/기기1회 |
| W6 | 구독관리 페이지·프로필/사이드바 표시 | 실충전/쿠폰 분리 표시 |
| W7 | 전환 CTA·단발 동의 UX·도구턴 품질안내 | 트리거·이벤트 로깅 |
| W8 | 어드민 분리표시·예치계좌 대사·어뷰징 | 🅰🅱🅒 분리·대사 일치 |
| W9 | AI 레버(Flash-Lite·상한·Batch) | 건강 recall 테스트 |
| W10 | PG 결제 연동(결제 Phase) | webhook 검증·환불 흐름 |
| W11 | 법무·회계 산출물 | 약관·고지·대사 리포트 |

> **베타 게이트** — W1·W3·W5·W6·W7·W8(측정)은 베타에 필요. 충전·결제 차감(W2 쓰기·W10)은 결제 Phase. 베타에선 결제 비활성(예고만).

---

## 8. ⚖️ 법무·회계 산출물 (출시 전, 변호사 없이 표준가이드 기반)

- 표준약관(충전금=선수금·만료없음·전액환불·환불 절차), 전자상거래법 청약철회·정기결제 사전고지 문구.
- 선불전자지급수단 **자가발행 예외** 검토 메모(달록 전용 사용이라 보통 예외 — 확인만).
- 미사용잔액 100% 별도계좌 대사 리포트.

---

## 9. ✋ 사장님 확인 필요 / 선결 항목

**확인 권고 (CC 추천값으로 진행 중, 다르면 알려주시면 조정)**
- **할증 = 하루 할당 누적배수 소모(돈 안 나감, 매출0)** — CC↔Codex 토큰 시뮬 결과 over-cap 턴이 평균 턴의 1.7~1.8배라, 연장 깊이 따라 1.2→2.0배 누적 차감. **정액 35원안은 실비 대비 과다·반발 우려로 비권고**(사장님이 잠정 정하셨던 35원의 재검토 결과). 사용자에겐 원·토큰 숨기고 "대화가 길어져 N배 소모돼요" 톤으로 안내. **베타 실측(턴별 토큰 이미 로깅)으로 배수 최종 확정** — 사장님 확인 대상.
- 무료 정식 월캡 = 45~50 A/B 여지(현재 50).

**선결 (숫자 최종 확정 전 필수)**
1. 통화 표시 버그(달러↔원) 해소 — 안 고치면 실원가 검증 불가.
2. 베타 실측 — 대화 1회당 실제 비용·도구턴 비중.
3. Gemini 청구통화 실제 인보이스 확인 / Flash-Lite 채택 검토.

---

## 10. ⏭️ 다음 단계

1. **사장님 최종 검수·컨펌** (이 KB 문서 + 본레포 MD).
2. 컨펌되면 **새 스레드**가 본 설계서로 코드 작업(⑥) — KB "작업 프롬프트 생성기" 템플릿 준수.
3. 마이그레이션 적용 → 베타 게이트(어드민 실가동) → 클로즈베타 실측 → 정식 숫자 확정.

> **요약 한 줄** — 가격·정책·차감모델·회계·환불·UI·구현범위·법무까지 **Codex 5라운드로 다 닫았고**, 남은 건 사장님 한 줄 컨펌과 (별도 스레드) 실제 코딩입니다.

---

## 부록 — 구현 필수 규칙·추가 확정 전문 (AI 원본 §10·§11 — 2026-06-11 누락분 보강 편입)

> 위 본문은 사장님 검수용 시각화 요약이고, 아래는 **구현 스레드가 그대로 따라야 하는 기술 규칙 전문**입니다(본레포 `docs/go_work/workdesign_charge_pricing_v1.md` 원본 동기화). 실제 구현(PR#80~#83)은 이 규칙대로 완료·검증되었습니다.

## 10. 구현 필수 규칙 — Codex R2 No-go 해소 (착수 전 반드시)

> R2가 잡은 4 Critical·5 High·3 Medium. 새 스레드는 아래를 **선결 규칙**으로 지킨다.

### 10-1. 보안·RLS·RPC 경계 (C-4·C-5)
- **기존 self INSERT/UPDATE RLS 제거** — `coach_subscription`/`coach_entitlement`/`coach_thread_usage`의 authenticated self 쓰기 policy를 **전부 DROP**(클라이언트 직접 entitlement 조작 = 지갑 원장과 즉시 불일치). 모든 상태 변경은 RPC로만.
- **금액 변동 RPC = `SECURITY DEFINER`** + `REVOKE ALL ... FROM public; GRANT EXECUTE ... TO authenticated`. (원장 append-only 유지하면서 INSERT 가능. SELECT는 본인 RLS.)
- 원장(`coach_wallet_ledger`)·쿠폰 부여 = INSERT policy 없음(클라 쓰기 차단), DEFINER RPC/service_role만.

### 10-2. plan_type 'hidden' (C-3·M-2)
- **CHECK 확장** — `coach_request_log`·`coach_conversation`·**`coach_thread_usage`**(현재 CHECK/FK 없음 — 추가) 3곳에 `'hidden'`(필요시 `'hidden_plus'`) 추가 ALTER.
- 한 마이그레이션에 재시드(C-2)+CHECK(C-3)+tier3 은퇴를 **묶어** 실행.

### 10-3. coach_consume_turn 신규 시그니처 + 원자성 (H-1·H-3)
- 시그니처: `coach_consume_turn(p_thread_id uuid, p_turn_type text, p_tool_call_count int, p_charge_mode text)` (기존 p_is_extension 대체/확장). p_charge_mode ∈ normal/surcharge/single.
- **단일 트랜잭션 잠금 순서** — `coach_entitlement` → `coach_daily_usage` → `coach_wallet_account` 순 `FOR UPDATE`. **모든 검사(월 hard cap·일 included·방 cap·도구캡·잔액) 통과 시에만** ledger INSERT + 잔액/카운터 UPDATE. (금액 차감 성공 후 월캡 실패 = 금지.)
- 엣지 명세 — 월 hard cap 잔여 < 할증 필요분 → 거부, 일캡·방캡 동시 도달 → 우선순위(§2-1) 적용, 자정 경계 = Asia/Seoul.

### 10-4. 시간대 (H-2)
- `coach_daily_usage.day DEFAULT ((now() AT TIME ZONE 'Asia/Seoul')::date)`. 모든 일 집계 Asia/Seoul 고정(기존 usage_summary 정합).

### 10-5. 쿠폰 소진 순서 (H-4)
- 차감 시 `coach_coupon_grant`를 **`valid_until ASC FOR UPDATE`**(만료 임박 우선 소진) → grant별 `used_krw` 갱신 + ledger `use_coupon`(ref_id=grant.id) → 마지막에 `coach_wallet_account.coupon_balance_krw` aggregate 갱신. account 총액과 grant 합 **불일치 방지**(aggregate는 파생값).

### 10-6. 결제 멱등성 (H-5)
- **`coach_payment_event(payment_ref TEXT PRIMARY KEY, user_id, amount_krw, status, created_at)`** 선기록 → webhook 재전송 시 PK 충돌로 중복 충전 차단. 또는 ledger `UNIQUE(event_type, payment_ref)`.

### 10-7. 설정값·무결성·Phase (M-1·M-3·Phase)
- `single_use_krw=150`·무료 정식 월캡(45~50 A/B) = `coach_billing_setting` ALTER 컬럼.
- 신규 테이블 PK = `GENERATED ALWAYS AS IDENTITY`(ledger) 또는 UUID(account/coupon 명시), 금액 컬럼 `CHECK (>= 0 or 부호규칙)`, 조회 인덱스(user_id, created_at DESC / user_id, day) 명시.
- **`billing_phase='billing'` 가드를 모든 금액 변동 RPC 초입에 SQL로 강제**(베타엔 원장 쓰기 0 보장 — §0-2). 베타에서 충전/할증/단발 RPC 호출 시 즉시 거부 리턴.

### 10-8. R2 판정 추적
R2 = No-go → 위 10-1~10-7 반영 = rev.2. **Codex R3로 Go 확인 후** 새 스레드 착수.

---

## 11. Codex R4 추가 확정 — 설계 완결 (착수 전 결정 닫음)

> R4 No-go의 "SQL 미존재"(C#2~5·7·12·13)는 **결함이 아니라 구현 범위**(W1~W10 신규 마이그레이션으로 생성 — 본 설계서가 그 명세). 아래는 R4가 짚은 **진짜 설계 결정**을 닫은 것.

### 11-1. 할증 정의·가중치 (R4 #1·#14·(A)2 / CC↔Codex 토큰 시뮬 토론 2026-06-10)
- 할증 = **일일 할당 가중 소모**(충전금 과금 아님, 매출0). **정액 35원안은 비권고** — C.ai 단일계산 근거 + 실원가(~₩12~17/over-cap턴) 대비 과다 → 사용자 반발·원 단위 노출 거부감.
- **근거(실코드 기반 시뮬, CC·Codex 독립 수렴)** — useCoachChat가 **매 턴 전체 이력 재전송 + injection 매 턴 재조립** → 턴원가 선형 증가. over-cap 턴 = 평균 턴의 **~1.7~1.8배**(깊이 따라 1.5→2.1배 상승). 캐시 실효 F≈4,750tok / H≈600 / O≈500.
- **확정 모델 = 누적배수(할당 가중 소모, 원·토큰 비노출)** — 캡 이내 1.0x / 연장 1~5턴 1.2x / 6~10턴 1.5x / 11~15턴 1.8x / 16턴+ 2.0x. 연장 평균 실효 ~1.55x ≈ 실원가 정합·손해 없음. `coach_billing_setting`에 배수 밴드 설정값.
- **음수 방지** — 일일 할당 잔여 < 가중치면 잔여만큼만 차감 후 "소진" 전환 → 단발 안내.
- **사용자 표시** — "대화가 길어져 이전 맥락을 함께 읽어요. 이 구간은 N배 소모돼요" 톤(원·토큰 비노출). 연장 진입 직전 1회 + 5턴마다 배율 갱신.
- 회계 — 정상·할증 턴 = 매출0(플랜료 포함), 단발(deduct_single, real) = 매출. 기획안 §7-2·§7-3 정합.
- **★ beta 실측 재보정** — `coach_request_log`가 턴별 input/output 토큰을 이미 로깅 → 베타 실데이터로 배수 밴드 최종 확정(현재는 시뮬 추정). 사장님 최종 확인 대상.

### 11-2. 자정 롤오버 (R4 #6)
- 일일 할당 day = **턴 요청 생성 시각(Asia/Seoul) 기준**(응답 시각 아님). request row에 day 고정 후 consume에 전달 → 자정 직전 시작·자정 후 응답도 전날 차감.

### 11-3. 무료 부스트 = 별도 promotional quota (R4 #8)
- 부스트는 일일 2/일을 **소모하지 않는 별도 quota**(7일 OR 첫3세션·세션당5턴). 부스트 우선 소진, 부스트 0이면 기본 2/일. 월 hard cap(베타60/정식50)이 부스트+기본 합산 상한.

### 11-4. 쿠폰 × 단발 (R4 #9)
- 단발도 **쿠폰 우선 소진 → 실충전**. 쿠폰 결제 단발 = `use_coupon`(매출0), 실충전 단발 = `deduct_single`(매출). 단발 매출 인식 = **실충전 차감분만**.

### 11-5. 자동충전 × 단발 자동적용 가드 (R4 #10·#16·#17)
- 자동충전: 일·월 한도 + 쿨다운 + 잔액부족 실패 상태(`coach_billing_setting`) → 무한 결제 루프 차단.
- 단발 자동적용 ON = 결제성 자동차감 → **별도 사전 고지 + 즉시 OFF + 누계/최근차감 표시**(정기결제 고지 의무). 기본 OFF.
- 확인 모달 UX = **대화방 단위 1회 동의 → 그 방 내 자동 단발**(매 턴 모달 지양). 이탈 상태값·재노출 주기 정의.

### 11-6. 환불 가능액 산식 (R4 #11)
- `refundable_real = sum(amount_krw) FILTER (track='real')` = `real_balance_krw`(소비분 이미 차감 제외). **음수 방지 CHECK**. 쿠폰 잔액 환불 제외.

### 11-7. 비용 로그 신뢰 (R4 #18)
- `coach_request_log.estimated_cost` 클라 계산·self insert = 조작 위험 → **서버(워커/RPC) 검증 필드 또는 insert 경로 제한**. 차감(entitlement/ledger)과 원가로깅(감사) 분리.

### 11-8. 어뷰징 보강 (R4 #15)
- 부스트 제외 외 **무료 월 hard cap 자체가 원가 상한**(다계정도 계정당 50). risk 기준 추가 부스트 제외 + 필요시 대기열.

> **R4 잔여 No-go = 전부 "구현 미착수(SQL 생성)"** — W1~W10에서 닫힘. **설계 결정은 본 §11로 완결** → 설계 confirmed, 새 스레드 착수 가능.
