Files
ga-commission-system/docs/수수료_계산공식_전체레퍼런스.md
T
GA Pro b12858c991 docs: 수수료 종류별 계산공식 전체 정리 + 신입교육 문서 보완
- docs/수수료_계산공식_전체레퍼런스.md 신규: 모든 수수료 종류의 실제 구현
  계산식(코드 기준, 감사 수정 반영) — 모집/유지 3곱, 지급성 11종, 조직·실적,
  횡단(1200%clip/분급/환수/세금/집계net/회계예수금분개).
- 신입교육_보험과수수료_완전기초.md 보완:
  - 6-A 수수료 종류별 계산식 하나씩(미니 숫자예시) — 생애주기/성과조직/소개지원/회사레벨
  - 6-B 기타수수료(예외 가감 PLUS/MINUS, 시책, 해촉정산, 본사정산, 보증보험)
  - 목차 갱신

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:41:36 +09:00

142 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 수수료 계산 공식 전체 레퍼런스 (코드 기준)
> 모든 수수료 종류의 **실제 구현 계산식**을 정리한 문서입니다.
> 출처는 각 `*Service` / `*Calculator` / Step 코드이며, 2026-06 수수료 감사 수정분이 반영돼 있습니다.
> 공통 규칙: 모든 금액 `BigDecimal`, 반올림 `HALF_UP`. 금액 `NUMERIC(15,2)`(소수 2자리),
> 율 `NUMERIC(7,4)`. 원천세·환수 등 일부 집계는 원단위(scale 0).
---
## 0. 가장 기본 — 모집/유지 "세 번 곱하기"
`CommissionCalculator` (모집·유지 공통, 회차만 다름)
```
① 보험사지급액 = 보험료(premium) × 보험사요율(company_rate %) / 100
② 설계사수수료 = 보험사지급액 × 지급률(payout_rate %) / 100 ← gross(agent_amount)
③ 원장 원천세 = 설계사수수료 × 3.3% ← tax_amount
```
- `company_rate`: 상품 × 회차(commission_year) × 기준일로 조회
- `payout_rate` : 설계사등급 × 보험종류 × 회차로 조회 (등급 높을수록 ↑)
- 율이 NULL이면 0 폴백 + **경보 로그**(과소지급 추적). 금액 pct는 scale 2.
- **숫자 예시**: 보험료 1,000,000 × 60% = 600,000 → × 75% = 450,000 → 세금 14,850
| 종류 | 코드 | 회차(commission_year) | 귀속 |
|---|---|---|---|
| **모집수수료** | recruit | 1 (초년도) | 원 모집설계사 (승계돼도 잔류) |
| **유지수수료** | maintain | 2~ (`monthsElapsed/12 + 1`) | 현재 관리설계사 (승계 시 후임) |
---
## 1. 설계사 지급성 수수료 (settle_master gross 에 합산되는 9종 + 본 2종)
| # | 종류 | 코드 | 계산 공식 | 비고 |
|---|---|---|---|---|
| 1 | 모집수수료 | recruit | `premium × company_rate × payout_rate` | §0 |
| 2 | 유지수수료 | maintain | 〃 (회차만 다름) | §0 |
| 3 | **수금수수료** | collection | `commission = 보험료(premium_amount) × 수수료율(commission_rate)` | `CollectionCommissionService:89` |
| 4 | **갱신수수료** | renewal | `commission = req.commissionAmount` (룰의 rateValue/fixedAmount 참조, 원장은 입력액) | `RenewalCommissionService:91` |
| 5 | **부활수수료** | reinstatement | `net = commissionAmount + chargebackReversal` (부활 시 기환수액 일부 복원) | `ReinstatementCommissionService:88,100` |
| 6 | **지속수당(유지보너스)** | persistency_bonus | 유지율 ≥ `retention_rate_threshold` 일 때 `bonus_value` (RATE형 base×율 / FIXED형 정액) | 룰: 등급별 임계유지율 |
| 7 | **소개·이관수수료** | referral | RATE형 `base × rate` / FIXED형 `fixed_amount`. (RATE는 룰 rate 우선, 없으면 req) | `ReferralCommissionService:103,110,114` |
| 8 | **정착지원금** | settling_support | `net = support_amount clawback`. **환수액 ≤ 지원금 검증**(net 음수 차단) | `SettlingSupportService` |
| 9 | **시상** | award | `threshold_amount 이상`일 때만: RATE `base × award_rate` / FIXED `award_fixed` | `AwardService` (threshold 게이트) |
| 10 | **생보운영지원수수료** | life_support | `support = base × support_rate`, `net = support clawback`. **환수 ≤ support 검증** | `LifeSupportService` |
| 11 | **지점장수당** | branch_allowance | `allowance = min(base × allowance_rate, cap)`. cap=NULL이면 무제한. `net = allowance clawback` | `BranchAllowanceService:85-93` |
> settle_master 집계 시 9종(3~11, 모집·유지 제외)은 `other_commission_total` 로 합산돼 gross 에 더해진다.
---
## 2. 조직·실적 기반
| 종류 | 코드 | 계산 공식 | 비고 |
|---|---|---|---|
| **오버라이드** | override | `amount = min(base × override_pct, cap)`. **base = 하위설계사 모집+유지 합** (룰에 `insurance_type_cond` 있으면 해당 보험종류만 집계) | `CalcOverrideStep`. cap NULL=무제한. 조직트리 상향 탐색해 가장 가까운 `to_grade` 1명에 귀속 |
| **인정실적(환산보험료)** | recognized | `converted = premium × conversion_rate`, `recognized = converted × recognition_rate` | `RecognizedPerformanceService:85,89`. 시상·등급 산정 기초 |
| **수입수수료** | income | `income = premium × company_rate`. 수지차 `margin = Σincome Σpayout`, `marginRate = margin / Σincome` | `IncomeCommissionService:47,83,86`. 보험사→GA 수입 원장 |
| **등급평가** | grade_eval | `performance_score``selectActiveRuleByScore` → 매칭 룰의 `gradeId`로 등급 결정 (없으면 기존등급 유지) | `GradeEvaluationService:95-97` |
| **공동계약 지분** | joint_contract | 계약별 `Σ share_rate ≤ 1.0` 검증 (초과 시 E411). 각 설계사 몫 = 수수료 × 본인 share_rate | `JointContractService` |
| **준비금** | reserve_fund | `balance = (직전월 balance or 0) + reserve_in reserve_out` | `ReserveFundService:50` |
| **수수료 시뮬레이션** | simulation | `사수 = premium×company_rate×payout_rate`, `원천세 = 사수×3.3%`, `net = 사수−원천세`, `예상환수 = 사수×기본환수율(or 입력)` | `CommissionSimulationService` (조회 전용 미리보기) |
---
## 3. 횡단(cross-cutting) 규제·정산 계산
### 3-1. 1200% 룰 (RegulatoryLimitChecker) — **단위 환산 + clip+이연**
```
한도(KRW) = 연환산보험료 × 한도율(%) / 100 ← unit=PERCENT 일 때 (1200%, 1차년 35%)
위반조건 = (기지급 누적 + 추가분) > 한도(KRW)
```
- 1차년 한도 초과 시: **한도잔여까지만 당월 지급(clip)**, 초과분만 분급(7년)으로 **이연**, 세액 재계산.
전액 이연되면 당월 원장 미생성. (`CalcRecruitStep`)
### 3-2. 분급 (InstallmentPlanGenerator) — 7년 분할
```
회차별 지급 = 총수수료 × 회차비율(%) / 100 (표준 35/25/15/10/7/5/3)
```
- 비율 합이 정확히 100%이면 **마지막 회차가 반올림 잔차를 흡수**(분급 합 = 원금 보장).
### 3-3. 차등환수 (ChargebackCalculator) — 조기해지
```
경과월 = MONTHS_BETWEEN(계약일, 해지일)
환수액 = 기지급 모집수수료 × 환수율(경과월 구간)
```
| 경과월 | 환수율 |
|---|---|
| 0 ~ 12 | 100% |
| 13 ~ 24 | 50% |
| 25 ~ 36 | 25% |
| 37 ~ 84 | 10% |
| 85 ~ | 0% |
- (0개월 즉시해지도 100% 구간에 포함 — V109 보정)
### 3-4. 세금 (TaxCalculator / BatchTaxCalculator)
```
소득세 = gross × 소득세율(사업 3.3% / 기타 8.8%) (scale 0, 원단위)
지방세 = 소득세 × 10% (scale 0)
부가세 = gross × 10% (과세사업자 TAXABLE 만, 그 외 0)
net = gross − 소득세 − 지방세 + 부가세
```
- **gross ≤ 0(환수>지급)이면 세금 0, net = gross** (음수 원천세가 신고에 전파되는 것 차단)
### 3-5. 집계 → 실지급 (AggregateStep, settle_master)
```
gross = 모집 + 유지 + 오버라이드 + 예외(+) − 환수 − 예외() + 기타9종(other_commission_total)
tax = 소득세 + 지방세
net = gross − 소득세 − 지방세 + 부가세 − 공제(deduction)
```
- net < 0(공제>지급)이면 경보 로그(차월 이월 검토 대상).
- 무결성: 8단계 후 `Σ원장 == Σsettle_master`.
### 3-6. 회계 분개 (AccountingEntryGenerateStep) — **원천세 예수금 분리**
```
(차) 8350 지급수수료 gross
(대) 2530 미지급금 net (= gross 원천세)
(대) 2540 예수금 원천세(tax_amount) ← 원천세>0 일 때 leg 분리
```
- 차변합(gross) = 대변합(net + 원천세) 균형.
---
## 4. 실지급 흐름 한 장 요약
```
보험료 ─×보험사요율─▶ 보험사지급액 ─×지급률─▶ 설계사수수료(gross)
┌─ 1200%룰: 1차년 한도 clip + 초과분 7년 분급 이연 ─┐
└─ 조기해지: 차등환수(−) / 부활: 환수복원(+) ┘
gross − 소득세 − 지방세 (+부가세) − 공제 = net(실지급) ──▶ 펌뱅킹 이체
회계분개: (차)지급수수료 / (대)미지급금 net + 예수금 원천세
```
---
*기준 코드: CommissionCalculator, TaxCalculator, ChargebackCalculator, InstallmentPlanGenerator,
RegulatoryLimitChecker, CalcRecruit/Maintain/OverrideStep, AggregateStep, AccountingEntryGenerateStep,
P7/P8 12개 commission Service. schema v110. 2026-06 수수료 감사 수정 반영.*