Files
ga-commission-system/docs/수수료_계산공식_전체레퍼런스.md
GA Pro 711f3b5e16 docs: 수수료 레퍼런스에 갭보완 4종(§3-7) 반영 + 간이지급명세서 주민번호 화면 마스킹
- 수수료_계산공식_전체레퍼런스.md: §3-7 감사 보완 4종(A 지급보류/B 환수원천세역분개/
  C 환수채권연체이자/D 간이지급명세서) 추가, schema v126 표기
- SimplifiedPaymentReport: 화면 표시용 주민번호 마스킹(생년월일+성별구분 이후 *).
  엑셀 export는 국세청 제출용이라 원본 유지

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 21:27:26 +09:00

11 KiB
Raw Permalink Blame History

수수료 계산 공식 전체 레퍼런스 (코드 기준)

모든 수수료 종류의 실제 구현 계산식을 정리한 문서입니다. 출처는 각 *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_scoreselectActiveRuleByScore → 매칭 룰의 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 + 원천세) 균형.

3-7. 2026-06 감사 보완 4종 (V124~V126)

설계사 지급성 수수료 종류는 사실상 완비된 상태에서, 감사로 발견한 실제 결함·규제 갭만 보완.

3-7-A. 지급보류(HOLD) 지급배치 제외 — 버그 수정

지급배치 대상 = settle_master WHERE payable_amount>0 AND status NOT IN ('PAID','HOLD')
  • 종전엔 status != 'PAID' 만 검사 → 운영자가 지급보류(HOLD)한 설계사도 펌뱅킹 이체에 포함되던 결함. (PaymentBatchItemMapper.insertFromSettleMaster)

3-7-B. 환수 원천세 역분개 — 교차월 환수 시 기납부 원천세 보정

gross<0(상계되지 않은 환수분)인 월:
  역분개 기준액  = |gross|
  소득세 역분개  = (|gross| × 소득세율)       ← withholding_tax_adjustment (음수)
  지방세 역분개  = −(소득세 역분개액 × 10%)
분기 원천세신고 = Σpayment(원천세) + Σadjustment(역분개, 음수)   ← 과대신고 해소
  • gross≥0(당월 환수가 양수분으로 상계)인 달은 당월 과세에 이미 반영 → 역분개 미발생(이중계상 없음).
  • settle_master gross/net/carryover/payable 흐름은 불변(역분개는 신고보정용 별도 레코드). (AggregateStep gross<0 분기, WithholdingTaxReportMapper.upsertQuarterlyAggregate)

3-7-C. 환수채권 연체이자 — 미수채권 이월 시 월 단리 적립

당월 적립이자 = 채권잔액(balance) × 연체이자율(%) / 1200      (월 단리, scale 0)
적립조건      = origin_settle_month ≤ 당월  (거치기간+1)
balance      += 적립이자  (→ 기존 FIFO 상계가 이자까지 회수)
  • 이자율 CLAWBACK_OVERDUE_INTEREST_RATE(기본 0=미적립 안전폴백), 거치기간 CLAWBACK_INTEREST_GRACE_MONTHS(기본 0).
  • 멱등: clawback_interest 이력으로 당월 적립분 reverse 후 재적립. (AggregateStep.reverseAndAccrueClawbackInterest)

3-7-D. 사업소득 간이지급명세서(월별) — 국세청 제출 대응

간이지급명세서 = commission_statement(MONTHLY) ⋈ agent
                 (소득자·주민/사업자번호·지급액·소득세·지방소득세·차인지급액)
  • 신규 데이터테이블 없음(읽기전용 리포트). 조회 + 엑셀 export. (ReportMapper.selectSimplifiedPayment)

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 v126. 2026-06 수수료 감사 수정 + 갭보완 4종(§3-7) 반영.