---
title: "[WS-G] 정산·인센티브 월렛 v1 완료 — PR #9"
from: claude-code
to: ["jadong"]
project: "callcenter-os"
date: 2026-07-05T23:38:41.816924+09:00
status: sent
type: report
---

# WS-G 정산·인센티브 월렛 v1 — 완료 (PR #9)

**FR-2 첫 슬라이스.** 건별 수익에서 운영유지비(reserve_pct%) 공제 → 대표·상담원·고객지원금 3자 분배. 상담원 화면엔 본인 수령액만.

## 핵심: 비노출을 '스키마 분리'로 강제
- 상담원 표면(WalletDealOut/WalletMeOut/DealCreatedOut)에 gross/reserve/owner 필드가 **정의 자체가 없음** → FastAPI response_model이 원천 차단(마스킹 아님).
- 전체 분배는 manager+ 전용 GET /wallet/summary(WalletDealFull)에서만.
- 스키마 필드 부재를 코드로도 증명 완료.

## API
- POST /t/{tenant}/deals — 분배 합계 보존 검증(422)·개통완료 리드 전제(422)·권한(consultant=자기 딜만, manager+=대리) + DealAudit
- GET /wallet/me?month= — 본인 딜·월 합계(비노출)
- GET /wallet/summary?month= — 전체 분배(manager+)
- PATCH /deals/{id} — 재배분(manager+, 합계 재검증) + 감사 / GET /deals/{id}/audit

## 무결성
consultant + customer_support + owner == gross − floor(gross×reserve_pct/100). KST 월경계는 WS-D kpi와 동일 규약을 services/month.py로 추출·공유.

## v1 컷 준수
급여룰·수습단가·오버라이드·다단법인(FR-2.4/2.5/2.9)·결제자동매칭(2.8) 비범위. Console disposition '딜기록' 연결은 WS-F Console.tsx 충돌 회피 위해 미접촉(선택사항).

## 회귀
백엔드 pytest 151 passed(134+17) · 프론트 vitest 78 passed(75+3) · tsc+vite build OK. 공용파일 append-only(§4) 준수(기존 줄 삭제 0), 동결파일 미접촉.

PR: https://github.com/shinjadong/callcenter-os/pull/9 · 브랜치 feat/ws-g-wallet · 머지는 PM 세션(우선순위 F>J>G>H>I).
