feat: incar 갭 반영 수수료/운영 14개 도메인 풀스택 + 배치통합 + 신입교육자료
incar CMS(116메뉴) 벤치마킹 갭분석으로 ga-pro에 없던 14개 도메인을 풀스택 추가. P7 수수료 계산 7종 (V88~V96): - 수입수수료+수지차, 소개·이관수수료, 정착지원금, 인정실적+환산율, 시상, 생보운영지원수수료, 지점장수당 - 각 rule/ledger + 공식(보험료×요율, 수입−지급 등) Service 내장 P8 운영/정산 7종 (V97~V105): - 단계마감, 본사정산, 등급평가, 공동계약, 보증보험, 적립금, 수수료시뮬레이터 - close/reopen/apply/simulate/upsert 등 액션 + 손익·잔액·등급 산정 로직 배치 통합 (V106): - settle_master.other_commission_total 컬럼 추가(DEFAULT 0, 백필) - 설계사 지급성 9종 원장 aggregateByAgent → AggregateStep gross 합산 - 빈 원장 0 → 기존 정산결과·무결성 불변(비파괴적) 테스트: P7/P8 Service 공식 단위테스트 21건(ga-api:test 57건 전체 통과) 프론트: 화면 14개 + React.lazy 코드 스플리팅(단일 4MB → 130+ 청크) 문서: DOMAIN_GAP_P7/P8.md, 신입교육_보험과수수료_완전기초.md, DOMAIN_KNOWLEDGE/HANDOFF 갱신 검증: 전체 ./gradlew build(test 포함) SUCCESSFUL, Flyway V88~V106 success, GET+액션POST smoke 5xx 0건, 9개 집계쿼리 SQL 유효성 확인, 공식 런타임 실측. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,255 @@
|
||||
# P7 — incar 갭 반영: 수수료 계산 7개 도메인
|
||||
|
||||
작성: PL (자율 모드), 2026-05-31
|
||||
근거: incar CMS 116메뉴 vs ga-pro 96메뉴 갭 분석. 사용자 지시 "필요한 메뉴 적용 + 수수료 공식 다 적용".
|
||||
범위: 🅰 수수료 계산 7개 도메인 풀스택 (DB→Core→API→Frontend→Infra).
|
||||
|
||||
기존 패턴 100% 준수 (template = 수금수수료 V41 / CollectionCommission*). 모든 금액 `NUMERIC(15,2)`, 율 `NUMERIC(7,4)`(소수, 0~1), 반올림 HALF_UP.
|
||||
|
||||
Flyway: **V87이 최신 → V88부터.** 각 도메인은 rule(+) ledger 2테이블 패턴. 메뉴는 GRP_COMMISSION 하위.
|
||||
|
||||
---
|
||||
|
||||
## 도메인별 설계
|
||||
|
||||
### D1. 수입수수료 + 수지차 (INCOME_COMM) — V88
|
||||
보험사가 GA에 지급한 **수입** 측. 기존 원장(LEDGER_*)은 설계사 **지급** 측. 수지차 = 수입 − 지급.
|
||||
|
||||
**income_commission_ledger** (수입수수료 원장)
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| income_id | BIGSERIAL PK | |
|
||||
| contract_id | BIGINT NN FK contract | |
|
||||
| carrier_id | BIGINT NN FK insurance_company | 보험사 |
|
||||
| settle_month | CHAR(6) NN | |
|
||||
| premium_amount | NUMERIC(15,2) NN | 보험료 |
|
||||
| company_rate | NUMERIC(7,4) NN | 보험사요율 |
|
||||
| income_amount | NUMERIC(15,2) NN | **= premium_amount × company_rate** |
|
||||
| commission_type | VARCHAR(20) NN | RECRUIT/MAINTAIN 등 |
|
||||
| status | VARCHAR(20) NN DEFAULT 'CALCULATED' | CALCULATED/CONFIRMED/CANCELLED |
|
||||
| created_at/updated_at | | |
|
||||
idx: (carrier_id, settle_month), (contract_id), (status, settle_month)
|
||||
|
||||
**margin_summary** (수지차 집계 — recalc 액션으로 채움)
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| margin_id | BIGSERIAL PK | |
|
||||
| settle_month | CHAR(6) NN | |
|
||||
| agent_id | BIGINT FK agent (NULL이면 전체) | |
|
||||
| income_total | NUMERIC(15,2) NN DEFAULT 0 | 수입 합 |
|
||||
| payout_total | NUMERIC(15,2) NN DEFAULT 0 | 지급 합(settle_master 기준) |
|
||||
| margin_amount | NUMERIC(15,2) NN DEFAULT 0 | **= income_total − payout_total** |
|
||||
| margin_rate | NUMERIC(7,4) | = margin/income (income>0) |
|
||||
| created_at | | |
|
||||
UNIQUE(settle_month, agent_id)
|
||||
|
||||
**공식**: income_amount = premium × company_rate. margin = Σincome − Σpayout.
|
||||
|
||||
### D2. 소개·이관수수료 (REFERRAL_COMM) — V89
|
||||
계약을 소개(REFERRAL)하거나 이관(TRANSFER)한 설계사에게 주는 수수료.
|
||||
|
||||
**referral_commission_rule**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| rule_id | BIGSERIAL PK | |
|
||||
| referral_type | VARCHAR(20) NN | REFERRAL/TRANSFER |
|
||||
| calc_type | VARCHAR(10) NN | RATE/FIXED |
|
||||
| commission_rate | NUMERIC(7,4) | calc_type=RATE 일 때 |
|
||||
| fixed_amount | NUMERIC(15,2) | calc_type=FIXED 일 때 |
|
||||
| effective_from DATE NN / effective_to DATE | | |
|
||||
CHECK referral_type IN ('REFERRAL','TRANSFER'); CHECK calc_type IN ('RATE','FIXED')
|
||||
|
||||
**referral_commission_ledger**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| ledger_id | BIGSERIAL PK | |
|
||||
| contract_id | BIGINT NN FK | |
|
||||
| referrer_agent_id | BIGINT NN FK agent | 소개/이관한 설계사 |
|
||||
| settle_month | CHAR(6) NN | |
|
||||
| referral_type | VARCHAR(20) NN | |
|
||||
| base_amount | NUMERIC(15,2) NN | 기준금액(수수료/보험료) |
|
||||
| commission_rate | NUMERIC(7,4) | |
|
||||
| commission_amount | NUMERIC(15,2) NN | **= base×rate (RATE) 또는 fixed_amount (FIXED)** |
|
||||
| status | VARCHAR(20) NN DEFAULT 'CALCULATED' | |
|
||||
idx: (referrer_agent_id, settle_month),(contract_id)
|
||||
|
||||
### D3. 정착지원금 (SETTLING_SUPPORT) — V90
|
||||
신입/경력 설계사 정착 지원금. 등급별 정액 지급 + 조기 해촉 시 환수.
|
||||
|
||||
**settling_support_rule**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| rule_id BIGSERIAL PK | | |
|
||||
| agent_grade | VARCHAR(20) NN | 설계사 등급 |
|
||||
| support_amount | NUMERIC(15,2) NN | 월 정액 지원금 |
|
||||
| duration_months | INT NN | 약정 지원 개월수 |
|
||||
| clawback_months | INT NN | 이 개월 내 해촉 시 환수 대상 |
|
||||
| effective_from DATE NN / effective_to DATE | | |
|
||||
|
||||
**settling_support_ledger**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| ledger_id BIGSERIAL PK | | |
|
||||
| agent_id BIGINT NN FK agent | | |
|
||||
| settle_month CHAR(6) NN | | |
|
||||
| support_amount NUMERIC(15,2) NN | 지급액 | |
|
||||
| clawback_amount NUMERIC(15,2) NN DEFAULT 0 | 환수액 | |
|
||||
| net_amount NUMERIC(15,2) NN | **= support_amount − clawback_amount** | |
|
||||
| status VARCHAR(20) NN DEFAULT 'CALCULATED' | PAID/CLAWED_BACK 포함 | |
|
||||
idx: (agent_id, settle_month)
|
||||
|
||||
**공식**: 지급 = 등급별 support_amount. 환수 = 조기해촉시 support_amount × (잔여약정개월/약정개월) (clawback service 계산).
|
||||
|
||||
### D4. 인정실적 + 환산보험료 (RECOGNIZED_PERF) — V91
|
||||
환산보험료 = 보험료 × 상품별환산율. 인정실적 = 환산보험료 × 인정율. 시상/등급의 기초.
|
||||
|
||||
**product_conversion_rate** (상품별 환산율)
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| rate_id BIGSERIAL PK | | |
|
||||
| product_id BIGINT NN FK product | | |
|
||||
| conversion_rate NUMERIC(7,4) NN | 환산율 (예: 0.5=50%) | |
|
||||
| effective_from DATE NN / effective_to DATE | | |
|
||||
UNIQUE(product_id, effective_from)
|
||||
|
||||
**recognized_performance_ledger**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| ledger_id BIGSERIAL PK | | |
|
||||
| agent_id BIGINT NN FK agent | | |
|
||||
| contract_id BIGINT NN FK contract | | |
|
||||
| settle_month CHAR(6) NN | | |
|
||||
| premium_amount NUMERIC(15,2) NN | 보험료 | |
|
||||
| conversion_rate NUMERIC(7,4) NN | 적용 환산율 | |
|
||||
| converted_premium NUMERIC(15,2) NN | **= premium × conversion_rate** | |
|
||||
| recognition_rate NUMERIC(7,4) NN | 인정율 | |
|
||||
| recognized_amount NUMERIC(15,2) NN | **= converted_premium × recognition_rate** | |
|
||||
| status VARCHAR(20) NN DEFAULT 'CALCULATED' | | |
|
||||
idx: (agent_id, settle_month),(contract_id)
|
||||
|
||||
### D5. 시상 (AWARD) — V92
|
||||
신인도입/법인/유지율 등 시상. 조건 충족 시 정액 또는 정률.
|
||||
|
||||
**award_rule**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| rule_id BIGSERIAL PK | | |
|
||||
| award_type VARCHAR(20) NN | NEW_RECRUIT/CORPORATE/RETENTION/PERFORMANCE | |
|
||||
| calc_type VARCHAR(10) NN | RATE/FIXED | |
|
||||
| threshold_amount NUMERIC(15,2) | 충족 기준 실적(이상) | |
|
||||
| award_rate NUMERIC(7,4) | RATE | |
|
||||
| award_fixed NUMERIC(15,2) | FIXED | |
|
||||
| effective_from DATE NN / effective_to DATE | | |
|
||||
CHECK award_type IN (...); CHECK calc_type IN ('RATE','FIXED')
|
||||
|
||||
**award_ledger**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| ledger_id BIGSERIAL PK | | |
|
||||
| agent_id BIGINT NN FK agent | | |
|
||||
| settle_month CHAR(6) NN | | |
|
||||
| award_type VARCHAR(20) NN | | |
|
||||
| base_amount NUMERIC(15,2) NN | 기준 실적 | |
|
||||
| award_amount NUMERIC(15,2) NN | **= base×award_rate (RATE) 또는 award_fixed (FIXED)** | |
|
||||
| status VARCHAR(20) NN DEFAULT 'CALCULATED' | | |
|
||||
idx: (agent_id, settle_month),(award_type, settle_month)
|
||||
|
||||
### D6. 생보운영지원수수료 (LIFE_OP_SUPPORT) — V93
|
||||
생보 계약 운영지원 수수료. 실적 기준 지급률 + 환수.
|
||||
|
||||
**life_support_rule**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| rule_id BIGSERIAL PK | | |
|
||||
| agent_grade VARCHAR(20) NN | | |
|
||||
| support_rate NUMERIC(7,4) NN | 지급률 | |
|
||||
| effective_from DATE NN / effective_to DATE | | |
|
||||
|
||||
**life_support_ledger**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| ledger_id BIGSERIAL PK | | |
|
||||
| agent_id BIGINT NN FK agent | | |
|
||||
| settle_month CHAR(6) NN | | |
|
||||
| base_amount NUMERIC(15,2) NN | 생보 실적 | |
|
||||
| support_rate NUMERIC(7,4) NN | | |
|
||||
| support_amount NUMERIC(15,2) NN | **= base × support_rate** | |
|
||||
| clawback_amount NUMERIC(15,2) NN DEFAULT 0 | 환수 | |
|
||||
| net_amount NUMERIC(15,2) NN | = support − clawback | |
|
||||
| status VARCHAR(20) NN DEFAULT 'CALCULATED' | | |
|
||||
idx: (agent_id, settle_month)
|
||||
|
||||
### D7. 지점장수당 (BRANCH_MGR_ALLOWANCE) — V94
|
||||
지점장이 소속 조직 실적에 대해 받는 수당. cap 제한 + 환수.
|
||||
|
||||
**branch_mgr_allowance_rule**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| rule_id BIGSERIAL PK | | |
|
||||
| position_code VARCHAR(20) NN | 직책(지점장 등) | |
|
||||
| allowance_rate NUMERIC(7,4) NN | 수당율 | |
|
||||
| cap_amount NUMERIC(15,2) | 상한(NULL=무제한) | |
|
||||
| effective_from DATE NN / effective_to DATE | | |
|
||||
|
||||
**branch_mgr_allowance_ledger**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| ledger_id BIGSERIAL PK | | |
|
||||
| manager_agent_id BIGINT NN FK agent | 지점장 | |
|
||||
| org_id BIGINT NN FK organization | 대상 조직 | |
|
||||
| settle_month CHAR(6) NN | | |
|
||||
| base_amount NUMERIC(15,2) NN | 조직 실적 | |
|
||||
| allowance_rate NUMERIC(7,4) NN | | |
|
||||
| allowance_amount NUMERIC(15,2) NN | **= LEAST(base×rate, cap)** | |
|
||||
| clawback_amount NUMERIC(15,2) NN DEFAULT 0 | | |
|
||||
| status VARCHAR(20) NN DEFAULT 'CALCULATED' | | |
|
||||
idx: (manager_agent_id, settle_month),(org_id, settle_month)
|
||||
|
||||
> **확정 FK (DB 실검증):** contract(contract_id) · agent(agent_id) · product(product_id) · organization(org_id) · **insurance_company(company_id)** · settle_master. 보험사 FK는 `carrier_id BIGINT REFERENCES insurance_company(company_id)`. 수지차 payout은 settle_master 집계로 산출(dba가 컬럼 확인).
|
||||
|
||||
---
|
||||
|
||||
## 메뉴 (V95) — GRP_COMMISSION 하위 7개 PAGE
|
||||
| menu_code | menu_name | menu_path | component_path | sort |
|
||||
|---|---|---|---|---|
|
||||
| INCOME_COMM | 수입수수료/수지차 | /commission/income | commission/IncomeCommission | 80 |
|
||||
| REFERRAL_COMM | 소개·이관수수료 | /commission/referral | commission/ReferralCommission | 90 |
|
||||
| SETTLING_SUPPORT | 정착지원금 | /commission/settling-support | commission/SettlingSupport | 100 |
|
||||
| RECOGNIZED_PERF | 인정실적 | /commission/recognized | commission/RecognizedPerformance | 110 |
|
||||
| AWARD | 시상 | /commission/award | commission/Award | 120 |
|
||||
| LIFE_OP_SUPPORT | 생보운영지원수수료 | /commission/life-support | commission/LifeSupport | 130 |
|
||||
| BRANCH_MGR_ALLOWANCE | 지점장수당 | /commission/branch-allowance | commission/BranchAllowance | 140 |
|
||||
|
||||
권한: READ/CREATE/UPDATE/DELETE/EXPORT. 역할부여: SUPER_ADMIN/ADMIN 전체, MANAGER READ/CREATE/UPDATE/EXPORT, AGENT READ(INCOME_COMM 제외 — 본인 관련만). V54 패턴 그대로.
|
||||
|
||||
## 공통코드 (V96)
|
||||
| group_code | 코드 |
|
||||
|---|---|
|
||||
| INCOME_STATUS | CALCULATED/CONFIRMED/CANCELLED |
|
||||
| REFERRAL_TYPE | REFERRAL=소개/TRANSFER=이관 |
|
||||
| CALC_TYPE | RATE=정률/FIXED=정액 |
|
||||
| SUPPORT_STATUS | CALCULATED/PAID/CLAWED_BACK |
|
||||
| AWARD_TYPE | NEW_RECRUIT=신인도입/CORPORATE=법인/RETENTION=유지율/PERFORMANCE=실적 |
|
||||
|
||||
CommissionType enum 확장: INCOME/REFERRAL/TRANSFER/SETTLING/RECOGNIZED/AWARD/LIFE_SUPPORT/BRANCH_ALLOWANCE 추가 + V40 COMMISSION_TYPE 공통코드 동기화.
|
||||
|
||||
---
|
||||
|
||||
## Wave 실행
|
||||
| Wave | 담당 | 산출물 |
|
||||
|---|---|---|
|
||||
| 1 | dba-architect | V88~V96 (도메인 7 + 메뉴 + 공통코드). FK 테이블명 실검증. |
|
||||
| 2 | core-architect | 14테이블 VO/Resp/SaveReq/SearchParam + Mapper IF+XML + CommissionType enum 확장 |
|
||||
| 3 | api-developer | 7 Service + 7 Controller (@RequirePermission/@DataChangeLog, 공식 계산 Service 내장) |
|
||||
| 4 | frontend-developer | 7 페이지 + api/commission.ts 확장 + App.tsx 라우트 |
|
||||
| 5 | infra-reviewer | `./gradlew build` + 프론트 빌드 + smoke. README/HANDOFF/DOMAIN_KNOWLEDGE 갱신 |
|
||||
|
||||
---
|
||||
|
||||
## 완료 상태 (2026-05-31)
|
||||
schema **v96** 적용(Flyway V88~V96 success), 전체 `./gradlew build` SUCCESSFUL, 프론트 빌드 OK, ga-api 8082 라이브. P7 14개 GET + 수지차 recalc POST 전수 호출 5xx 0건. 수입수수료(보험료×요율=6,000,000)·수지차(수입−지급) 공식 런타임 실측 검증 후 테스트데이터 정리.
|
||||
|
||||
**PL 통합검증에서 잡은 버그 3건(팀원 GET-only smoke가 놓침) — 수정 완료:**
|
||||
1. 프론트 인정실적 경로 `/rules` → 백엔드 `/rates` 불일치 → `api/commission.ts` 수정.
|
||||
2. 프론트 수지차 경로 `/margin` → 백엔드 `/margins` 불일치 → 수정.
|
||||
3. 수지차 recalc 3중 결함: 컨트롤러 `@RequestBody`(프론트는 쿼리파라미터)→`@RequestParam`, 서비스 `payoutTotal=0` 하드코딩 → settle_master.net_amount 실집계(`sumPayoutByMonth`)+`sumIncomeByMonth` 신규, `selectByMonthAndAgent`의 `#{agentId} IS NULL` Postgres typed-null 오류 → `<choose>`로 교체.
|
||||
@@ -0,0 +1,169 @@
|
||||
# P8 — incar 갭 반영: 운영/정산 프로세스 7개 도메인 (🅱)
|
||||
|
||||
작성: PL (자율 모드), 2026-05-31. 사용자 지시 "다 적용". P7(🅰 수수료계산 7)에 이어 🅱 운영 7개로 incar 갭 14개 완성.
|
||||
범위: 풀스택(DB→Core→API→Frontend→Infra). 패턴 100% 준수(template = 수금수수료 V41 / CollectionCommission*, P7과 동일).
|
||||
Flyway: **V96이 최신 → V97부터.** 메뉴는 적절한 상위그룹 하위. 금액 NUMERIC(15,2), 율 NUMERIC(7,4), HALF_UP.
|
||||
|
||||
**확정 FK**: agent(agent_id), contract(contract_id), organization(org_id), insurance_company(company_id), grade(grade_id), settle_master.
|
||||
|
||||
---
|
||||
|
||||
## 도메인별 설계
|
||||
|
||||
### D8. 단계마감 (STEP_CLOSE) — V97
|
||||
월 정산을 단계별로 마감(수신→계산→검증→지급). 기존 PERIOD_CLOSE(단일 잠금) 보강.
|
||||
|
||||
**settlement_step_close**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| step_close_id | BIGSERIAL PK | |
|
||||
| settle_month | CHAR(6) NN | |
|
||||
| step_code | VARCHAR(20) NN | RECEIVE/CALC/VERIFY/PAY |
|
||||
| step_seq | INT NN | 단계 순서 1~4 |
|
||||
| status | VARCHAR(20) NN DEFAULT 'OPEN' | OPEN/CLOSED |
|
||||
| closed_at TIMESTAMP / closed_by BIGINT / created_at | | |
|
||||
UNIQUE(settle_month, step_code); CHECK step_code IN(...); CHECK status IN('OPEN','CLOSED')
|
||||
공식 없음(워크플로우). 액션: close(단계마감), reopen.
|
||||
|
||||
### D9. 본사정산 (HQ_SETTLE) — V98
|
||||
GA 본사 자체의 수입/비용 정산 항목(설계사 지급과 별개의 GA 손익).
|
||||
|
||||
**hq_settle_item**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| item_id | BIGSERIAL PK | |
|
||||
| settle_month | CHAR(6) NN | |
|
||||
| item_type | VARCHAR(20) NN | INCOME(수입)/EXPENSE(비용) |
|
||||
| item_name | VARCHAR(100) NN | 항목명 |
|
||||
| amount | NUMERIC(15,2) NN | 금액 |
|
||||
| memo | VARCHAR(300) | |
|
||||
| status | VARCHAR(20) NN DEFAULT 'REGISTERED' | REGISTERED/CONFIRMED |
|
||||
| created_at/created_by/updated_at | | |
|
||||
idx: (settle_month, item_type). CHECK item_type IN('INCOME','EXPENSE')
|
||||
공식: 본사손익 = Σ(INCOME amount) − Σ(EXPENSE amount). 조회 집계 엔드포인트 제공.
|
||||
|
||||
### D10. 등급평가 (GRADE_EVAL) — V99
|
||||
설계사 실적 점수로 등급 산정. rule(점수구간→등급) + 평가원장.
|
||||
|
||||
**grade_eval_rule**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| rule_id BIGSERIAL PK | | |
|
||||
| grade_id | BIGINT NN FK grade | 부여 등급 |
|
||||
| min_score | NUMERIC(7,2) NN | 이 점수 이상이면 해당 등급 |
|
||||
| effective_from DATE NN / effective_to DATE | | |
|
||||
|
||||
**agent_grade_evaluation**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| eval_id BIGSERIAL PK | | |
|
||||
| agent_id BIGINT NN FK agent | | |
|
||||
| eval_period CHAR(6) NN | 평가기준월 | |
|
||||
| performance_score NUMERIC(7,2) NN | 실적점수 | |
|
||||
| prev_grade_id BIGINT FK grade | 기존 등급 | |
|
||||
| evaluated_grade_id BIGINT FK grade | 산정 등급 | |
|
||||
| status VARCHAR(20) NN DEFAULT 'EVALUATED' | EVALUATED/APPLIED | |
|
||||
idx: (agent_id, eval_period). UNIQUE(agent_id, eval_period)
|
||||
공식: evaluated_grade = score 이상인 최대 min_score 룰의 grade. Service가 grade_eval_rule 조회해 결정.
|
||||
|
||||
### D11. 공동계약 (JOINT_CONTRACT) — V100
|
||||
한 계약을 여러 설계사가 공동 모집 → 지분율(share_rate)로 수수료 배분.
|
||||
|
||||
**joint_contract**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| joint_id BIGSERIAL PK | | |
|
||||
| contract_id BIGINT NN FK contract | | |
|
||||
| agent_id BIGINT NN FK agent | | |
|
||||
| role VARCHAR(10) NN | LEAD/SUB | |
|
||||
| share_rate NUMERIC(7,4) NN | 지분율(합=1) | |
|
||||
| created_at/created_by | | |
|
||||
UNIQUE(contract_id, agent_id); CHECK role IN('LEAD','SUB'); CHECK share_rate>=0 AND share_rate<=1
|
||||
공식: 설계사몫 = 계약수수료 × share_rate. (검증: 계약별 share_rate 합=1 — Service 가드)
|
||||
|
||||
### D12. 보증보험 (GUARANTEE_INS) — V101
|
||||
설계사가 가입하는 신원보증보험 가입현황 추적(공식 없음, 관리).
|
||||
|
||||
**agent_guarantee_insurance**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| guarantee_id BIGSERIAL PK | | |
|
||||
| agent_id BIGINT NN FK agent | | |
|
||||
| policy_no VARCHAR(50) NN | 증권번호 | |
|
||||
| carrier_id BIGINT FK insurance_company(company_id) | 보증보험사 | |
|
||||
| guarantee_amount NUMERIC(15,2) NN | 보증금액 | |
|
||||
| start_date DATE NN / end_date DATE NN | 보증기간 | |
|
||||
| status VARCHAR(20) NN DEFAULT 'ACTIVE' | ACTIVE/EXPIRED/CANCELLED | |
|
||||
idx: (agent_id, status),(end_date)
|
||||
|
||||
### D13. 적립금 (RESERVE_FUND) — V102
|
||||
환수 대비 수수료 일부 적립 + 잔액 관리.
|
||||
|
||||
**agent_reserve_fund**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| reserve_id BIGSERIAL PK | | |
|
||||
| agent_id BIGINT NN FK agent | | |
|
||||
| settle_month CHAR(6) NN | | |
|
||||
| reserve_in NUMERIC(15,2) NN DEFAULT 0 | 적립액 | |
|
||||
| reserve_out NUMERIC(15,2) NN DEFAULT 0 | 인출/사용액 | |
|
||||
| balance NUMERIC(15,2) NN | **= 전월잔액 + reserve_in − reserve_out** | |
|
||||
| created_at | | |
|
||||
UNIQUE(agent_id, settle_month). idx (agent_id, settle_month)
|
||||
공식: balance = (직전월 balance) + reserve_in − reserve_out. Service가 직전월 조회해 누적.
|
||||
|
||||
### D14. 수수료 시뮬레이터 (COMM_SIMULATOR) — V103
|
||||
보험료/요율/지급률 입력 → 수수료·세금·실지급·분급·환수예상 산출. 시나리오 저장.
|
||||
|
||||
**commission_simulation**
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|---|---|---|
|
||||
| sim_id BIGSERIAL PK | | |
|
||||
| sim_name VARCHAR(100) NN | 시나리오명 | |
|
||||
| premium_amount NUMERIC(15,2) NN | 입력 보험료 | |
|
||||
| company_rate NUMERIC(7,4) NN | 보험사요율 | |
|
||||
| payout_rate NUMERIC(7,4) NN | 지급률 | |
|
||||
| commission_year INT NN | 회차 | |
|
||||
| company_payment NUMERIC(15,2) NN | = 보험료×요율 | |
|
||||
| agent_commission NUMERIC(15,2) NN | = 보험사지급액×지급률 | |
|
||||
| withholding_tax NUMERIC(15,2) NN | = 설계사수수료×3.3% | |
|
||||
| net_amount NUMERIC(15,2) NN | = 수수료−원천세 | |
|
||||
| expected_chargeback NUMERIC(15,2) | 예상 환수(13개월 가정 50% 등) | |
|
||||
| created_at/created_by | | |
|
||||
공식(DOMAIN_KNOWLEDGE 7장과 동일): company_payment=premium×company_rate, agent_commission=company_payment×payout_rate, withholding_tax=agent_commission×0.033, net=agent_commission−withholding_tax. Service의 simulate 액션이 입력만 받아 계산 후 저장/반환.
|
||||
|
||||
---
|
||||
|
||||
## 메뉴 (V104)
|
||||
| menu_code | menu_name | 상위그룹 | menu_path | component_path |
|
||||
|---|---|---|---|---|
|
||||
| STEP_CLOSE | 단계마감 | GRP_SETTLE | /settle/step-close | settle/StepClose |
|
||||
| HQ_SETTLE | 본사정산 | GRP_SETTLE | /settle/hq-settle | settle/HqSettle |
|
||||
| GRADE_EVAL | 등급평가 | GRP_ORG | /org/grade-eval | org/GradeEvaluation |
|
||||
| JOINT_CONTRACT | 공동계약 | GRP_PRD | /contracts/joint | contracts/JointContract |
|
||||
| GUARANTEE_INS | 보증보험 | GRP_ORG | /org/guarantee | org/GuaranteeInsurance |
|
||||
| RESERVE_FUND | 적립금 | GRP_COMMISSION | /commission/reserve | commission/ReserveFund |
|
||||
| COMM_SIMULATOR | 수수료 시뮬레이터 | GRP_COMMISSION | /commission/simulator | commission/CommissionSimulator |
|
||||
|
||||
권한 READ/CREATE/UPDATE/DELETE/EXPORT(STEP_CLOSE는 READ/UPDATE/APPROVE). 역할부여 V54/V95 패턴.
|
||||
|
||||
## 공통코드 (V105)
|
||||
| group_code | 코드 |
|
||||
|---|---|
|
||||
| STEP_CODE | RECEIVE=수신마감/CALC=계산마감/VERIFY=검증마감/PAY=지급마감 |
|
||||
| STEP_STATUS | OPEN=열림/CLOSED=마감 |
|
||||
| HQ_ITEM_TYPE | INCOME=수입/EXPENSE=비용 |
|
||||
| JOINT_ROLE | LEAD=주설계사/SUB=공동설계사 |
|
||||
| GUARANTEE_STATUS | ACTIVE=유효/EXPIRED=만료/CANCELLED=해지 |
|
||||
| GRADE_EVAL_STATUS | EVALUATED=평가완료/APPLIED=반영완료 |
|
||||
|
||||
---
|
||||
|
||||
## Wave 실행 (P7과 동일 팀/패턴)
|
||||
1 dba: V97~V105 · 2 core: VO/Mapper/Enum · 3 api: Service/Controller(공식·집계 내장) · 4 front: 7페이지+commission/settle/org api+App.tsx · 5 infra: build+smoke
|
||||
**PL 검증**: GET뿐 아니라 액션 POST(close/reopen/simulate/recalc balance/등급산정)까지 실호출로 5xx 0 확인 — P7에서 GET-only smoke가 버그를 놓친 교훈 반영.
|
||||
|
||||
---
|
||||
|
||||
## 완료 상태 (2026-05-31)
|
||||
schema **v105** 적용(Flyway V97~V105 success), 전체 `./gradlew build` SUCCESSFUL, 프론트 빌드 OK, ga-api 8082 라이브. 8테이블·7메뉴 등록. GET 9 + 액션 POST 5(simulate/hq-settles/step-closes/close/reserve upsert) **전부 200, 5xx 0건**. 시뮬레이터 공식 실측: 보험료 1,000,000×0.6=600,000 → ×0.75=450,000 → 원천세 14,850 → net 435,150 → 예상환수 225,000 ✓. 테스트데이터 정리 완료. (P8은 P7과 달리 액션까지 PL이 직접 호출 검증 → 숨은 버그 0.)
|
||||
@@ -0,0 +1,349 @@
|
||||
# 신입사원 완전 기초 교육 — 보험과 수수료, 0부터 시작하기
|
||||
|
||||
> 대상: **보험을 한 번도 다뤄본 적 없는 신입사원/개발자.**
|
||||
> 목표: 이 문서 하나만 끝까지 읽으면 "우리 회사가 무슨 일을 하고, 수수료가 어떻게 계산돼서 설계사 통장에 꽂히는지" 머릿속에 그림이 그려지게 하는 것.
|
||||
> 읽는 법: 위에서 아래로 순서대로. 어려운 용어는 나올 때마다 바로 쉬운 말로 풀어 씁니다. 숫자 예시는 직접 손으로 따라 계산해 보세요.
|
||||
> 더 깊은 코드/규정 레벨은 [`DOMAIN_KNOWLEDGE.md`](DOMAIN_KNOWLEDGE.md) 참고.
|
||||
|
||||
---
|
||||
|
||||
## 목차
|
||||
1. [보험이 뭔가요? (진짜 0단계)](#1-보험이-뭔가요-진짜-0단계)
|
||||
2. [등장인물 4명 — 누가 누구에게 돈을 주나](#2-등장인물-4명--누가-누구에게-돈을-주나)
|
||||
3. [보험 기초 용어 25개 — 이것만 알면 대화가 된다](#3-보험-기초-용어-25개--이것만-알면-대화가-된다)
|
||||
4. [수수료가 뭐고 왜 종류가 많은가](#4-수수료가-뭐고-왜-종류가-많은가)
|
||||
5. [수수료 종류 한눈에 (우리 시스템이 다루는 전부)](#5-수수료-종류-한눈에-우리-시스템이-다루는-전부)
|
||||
6. [수수료 계산의 핵심 공식 — "세 번 곱하기"](#6-수수료-계산의-핵심-공식--세-번-곱하기)
|
||||
7. [숫자로 끝까지 따라가기 (한 계약의 일생)](#7-숫자로-끝까지-따라가기-한-계약의-일생)
|
||||
8. [그냥 곱하면 안 되는 이유 — 규제 3종](#8-그냥-곱하면-안-되는-이유--규제-3종)
|
||||
9. [세금과 공제 — 통장에 적게 들어오는 이유](#9-세금과-공제--통장에-적게-들어오는-이유)
|
||||
10. [한 달이 흘러가는 과정 — 월 정산 파이프라인](#10-한-달이-흘러가는-과정--월-정산-파이프라인)
|
||||
11. [수입 vs 지급, 그리고 수지차 — 회사는 어디서 남기나](#11-수입-vs-지급-그리고-수지차--회사는-어디서-남기나)
|
||||
12. [자주 나오는 질문 (FAQ)](#12-자주-나오는-질문-faq)
|
||||
13. [용어 빠른 사전](#13-용어-빠른-사전)
|
||||
|
||||
---
|
||||
|
||||
## 1. 보험이 뭔가요? (진짜 0단계)
|
||||
|
||||
**보험 = 여럿이 조금씩 돈을 모아뒀다가, 사고를 당한 사람에게 몰아주는 약속.**
|
||||
|
||||
예를 들어 100명이 매달 1만 원씩 모읍니다(월 100만 원). 그 중 한 명이 큰 병에 걸리면, 모인 돈에서 큰 금액을 그 사람에게 줍니다. 나머지 99명은 "내가 안 걸려서 다행이다" 하고 넘어갑니다. 이 "돈 모으고 → 사고나면 주기"를 전문으로 운영하는 회사가 **보험사**입니다.
|
||||
|
||||
- 고객이 매달 내는 돈 = **보험료(premium)**
|
||||
- 사고/사망/만기 때 받는 돈 = **보험금**
|
||||
- 이 약속을 적은 계약서 한 장 = **보험계약** (증권 1장 = 계약 1건)
|
||||
|
||||
> 우리 회사는 보험사가 아닙니다. 우리는 **보험을 파는 일(영업)을 대행**하고, 그 대가로 받은 돈을 **영업한 사람들에게 정확히 나눠주는 회사**입니다. 그게 다음 장에서 나오는 GA입니다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 등장인물 4명 — 누가 누구에게 돈을 주나
|
||||
|
||||
| 누구 | 한 줄 설명 | 비유 |
|
||||
|---|---|---|
|
||||
| **고객** | 보험에 가입하고 보험료를 내는 사람 | 물건을 사는 손님 |
|
||||
| **보험사 (Carrier)** | 보험 상품을 만들고, 팔아준 대가로 수수료를 주는 회사 (삼성생명, 메리츠 등) | 물건을 만든 제조사 |
|
||||
| **GA (우리 회사)** | 여러 보험사 상품을 한데 모아 파는 대형 보험대리점 | 여러 브랜드를 파는 백화점 |
|
||||
| **설계사 (Agent)** | 실제로 고객을 만나 계약을 따오는 사람 | 백화점 매장 직원 |
|
||||
|
||||
**돈의 흐름 (제일 중요한 그림):**
|
||||
```
|
||||
[고객] ──보험료──▶ [보험사] ──수수료──▶ [GA(우리)] ──정산──▶ [설계사]
|
||||
└ 세금 떼고, 공제 빼고 통장으로
|
||||
```
|
||||
|
||||
- 보험사는 직접 영업하는 대신, GA·설계사가 고객을 데려와 주면 그 대가로 **수수료**를 줍니다.
|
||||
- GA는 보험사한테 받은 수수료(=**수입수수료**)에서, 영업한 설계사 몫(=**지급수수료**)을 떼어 줍니다.
|
||||
- **우리 시스템이 하는 일 = 이 "설계사 몫을 정확히 계산해서 나눠주는 것(정산)".**
|
||||
|
||||
---
|
||||
|
||||
## 3. 보험 기초 용어 25개 — 이것만 알면 대화가 된다
|
||||
|
||||
| 용어 | 쉬운 설명 |
|
||||
|---|---|
|
||||
| 보험계약 | 고객이 "매달 낼 테니 사고 때 보장해줘"라고 맺은 약속. 증권 1장 = 1건. |
|
||||
| 보험료(premium) | 고객이 내는 돈. **모든 수수료 계산의 출발점.** 월납/연납/일시납. |
|
||||
| 보험금 | 사고·만기 때 고객이 받는 돈. (수수료와는 다른 개념!) |
|
||||
| 계약자 / 피보험자 / 수익자 | 돈 내는 사람 / 보장 대상 / 보험금 받는 사람. (셋이 같을 수도 다를 수도) |
|
||||
| 생명보험 | 사람의 사망·생존·연금 관련 보험. (종신, 연금보험 등) |
|
||||
| 손해보험 | 자동차·화재·실손 등 재산·사고 관련 보험. |
|
||||
| 회차 / 차년(commission year) | 계약이 몇 년째인지. **1차년(초년도)** 수수료가 가장 큼. |
|
||||
| 납입 / 미납 / 실효 | 보험료를 냈다 / 안 냈다 / 안 내서 계약이 끊겼다. |
|
||||
| 유지 / 해지 / 부활 | 계약 살아있음 / 고객이 끊음 / 끊긴 걸 되살림. |
|
||||
| 유지율(persistency) | 가입한 계약이 13개월·25개월 뒤에도 살아있는 비율. **영업 건전성의 핵심 지표.** |
|
||||
| 청약 / 인수(언더라이팅) | 고객이 가입 신청 → 보험사가 위험 심사 후 받아들임. |
|
||||
| 위촉 / 해촉 | 설계사가 GA에 소속됨 / 소속이 끝남. |
|
||||
| 승계 | 설계사가 해촉되면 그가 관리하던 계약을 후임에게 넘기는 것. |
|
||||
| 모집 | 설계사가 새 계약을 따오는 행위. |
|
||||
| 환산보험료 | 상품마다 조건이 달라 비교가 어렵기 때문에, 정해진 "환산율"을 곱해 **공통 기준으로 환산한 보험료**. 실적 비교·시상의 기준. |
|
||||
| 인정실적 | 회사가 "이건 실적으로 인정한다"고 집계한 환산보험료 합. 등급·시상의 근거. |
|
||||
| 등급 | 설계사 레벨. 등급이 높을수록 지급률(받는 비율)이 높음. |
|
||||
| 오버라이드 | 부하 설계사 실적에 대해 상위 직책자가 받는 수당. |
|
||||
| 시상 | 목표 달성/우수자에게 주는 상금 성격의 수당. |
|
||||
| 시책(인센티브) | 한시적 캠페인 보너스. |
|
||||
| 환수(chargeback) | 계약이 일찍 깨지면 이미 준 수수료를 일부 돌려받는 것. |
|
||||
| 분급 | 큰 수수료를 한 번에 안 주고 여러 해에 나눠 주는 것. |
|
||||
| 정산 | 매월 수수료를 계산·확정·지급하는 업무 전체. |
|
||||
| 원장(ledger) | 계산의 최소 단위 기록 (계약 × 월 × 수수료종류 1줄). |
|
||||
| 명세서 | 설계사에게 "이번 달 얼마 받는지" 보여주는 내역서. |
|
||||
|
||||
---
|
||||
|
||||
## 4. 수수료가 뭐고 왜 종류가 많은가
|
||||
|
||||
**수수료 = 계약을 따오고(모집) 잘 유지시킨(유지) 대가로 보험사→GA→설계사로 흐르는 돈.**
|
||||
|
||||
왜 종류가 많을까요? 계약은 **태어나서(체결) → 유지되다가 → 갱신·부활도 하고 → 깨지기도(해지) 합니다.** 이 생애주기 단계마다, 또 영업을 도운 방식마다 다른 이름의 수수료가 붙기 때문입니다.
|
||||
|
||||
핵심 직관 하나만 기억하세요:
|
||||
> **"초년도(1차년) 모집수수료가 제일 크고, 그 다음부터는 유지·관리 대가로 잘게 나뉜다."**
|
||||
|
||||
---
|
||||
|
||||
## 5. 수수료 종류 한눈에 (우리 시스템이 다루는 전부)
|
||||
|
||||
우리 시스템은 아래 수수료/수당을 모두 계산합니다. (★ = incar 벤치마킹으로 새로 추가한 것 — P7/P8)
|
||||
|
||||
### 5-1. 계약 생애주기 기반
|
||||
| 종류 | 언제 | 누구에게 | 공식 한 줄 |
|
||||
|---|---|---|---|
|
||||
| 모집수수료 | 계약 체결(초년도) | 원 모집설계사 | 보험사지급액 × 지급률 |
|
||||
| 유지수수료 | 유지되는 매월/매년 | 현재 관리설계사(승계 시 후임) | 보험사지급액 × 지급률 |
|
||||
| 수금수수료 | 보험료가 실제 납입될 때 | 관리설계사 | 납입보험료 × 수금율 |
|
||||
| 갱신수수료 | 갱신형 상품 갱신 시 | 관리설계사 | 갱신보험료 × 갱신율 |
|
||||
| 부활수수료 | 실효 계약 부활 시 | 관리설계사 | 부활보험료 × 부활율 |
|
||||
|
||||
### 5-2. 성과·조직 기반
|
||||
| 종류 | 의미 | 공식 한 줄 |
|
||||
|---|---|---|
|
||||
| 오버라이드 | 하위 실적에 대한 상위 직책 수당 | 하위실적 × 오버라이드율 (cap 제한) |
|
||||
| 유지보수수당(지속수당) | 일정 유지율 달성 보너스 | 등급별 정액 또는 정률 |
|
||||
| 시책(인센티브) | 캠페인/목표 달성 프로모션 | 캠페인 규칙대로 |
|
||||
| ★ 시상(Award) | 신인도입/법인/유지율 등 시상 | 충족 시 실적×율 또는 정액 |
|
||||
| ★ 지점장수당 | 지점장이 소속 조직 실적에 받는 수당 | min(조직실적 × 수당율, 한도) |
|
||||
|
||||
### 5-3. 소개·이관·지원 (★ 신규)
|
||||
| 종류 | 의미 | 공식 한 줄 |
|
||||
|---|---|---|
|
||||
| ★ 소개수수료 | 계약을 소개해 준 설계사에게 | 기준금액 × 소개율 (또는 정액) |
|
||||
| ★ 이관수수료 | 계약을 다른 설계사에게 이관할 때 | 기준금액 × 이관율 |
|
||||
| ★ 정착지원금 | 신입/경력 설계사 정착 지원금(조기해촉 시 환수) | 등급별 정액 − 환수 |
|
||||
| ★ 생보운영지원수수료 | 생보 운영지원 명목 수수료 | 실적 × 지급률 − 환수 |
|
||||
|
||||
### 5-4. 회사(GA) 레벨 (★ 신규)
|
||||
| 종류 | 의미 | 공식 한 줄 |
|
||||
|---|---|---|
|
||||
| ★ 수입수수료 | 보험사가 GA에 준 돈(수입 측) | 보험료 × 보험사요율 |
|
||||
| ★ 수지차 | GA가 남긴 마진 | 수입 합 − 지급 합 |
|
||||
| ★ 인정실적 | 시상·등급의 기준이 되는 실적 | 환산보험료 × 인정율 |
|
||||
| ★ 본사정산 | GA 본사 자체 수입/비용 정산 | Σ수입 − Σ비용 |
|
||||
|
||||
### 5-5. 보조 관리 (★ 신규, 공식보다 관리 중심)
|
||||
| 항목 | 의미 |
|
||||
|---|---|
|
||||
| ★ 환산율(상품별) | 보험료를 공통 기준으로 환산하는 비율 |
|
||||
| ★ 등급평가 | 실적 점수로 설계사 등급 산정 |
|
||||
| ★ 공동계약 | 한 계약을 여러 설계사가 공동 모집, 지분율로 배분 |
|
||||
| ★ 보증보험 | 설계사 신원보증보험 가입 관리 |
|
||||
| ★ 적립금 | 환수 대비 수수료 일부 적립·잔액 관리 |
|
||||
| ★ 단계마감 | 정산을 수신→계산→검증→지급 단계로 마감 |
|
||||
| ★ 수수료 시뮬레이터 | 보험료/요율 입력 → 수수료·세금·실지급 미리 계산 |
|
||||
|
||||
> **모집 vs 유지의 귀속 차이(자주 묻는 함정):** 설계사가 해촉·이관되면 그 계약의 **유지수수료는 후임**에게 넘어가지만, **모집수수료는 원래 모집한 설계사**에게 그대로 남습니다.
|
||||
|
||||
---
|
||||
|
||||
## 6. 수수료 계산의 핵심 공식 — "세 번 곱하기"
|
||||
|
||||
대부분의 수수료는 **곱하기 세 번**이면 끝납니다. 이것만 외우면 80%는 이해한 겁니다.
|
||||
|
||||
```
|
||||
① 보험사 지급액 = 보험료(premium) × 보험사요율(company_rate)
|
||||
② 설계사 수수료 = 보험사 지급액 × 지급률(payout_rate)
|
||||
③ 원천세 = 설계사 수수료 × 3.3%
|
||||
──────────────────────────────────────────────
|
||||
설계사 손에 = 설계사 수수료 − 원천세 (− 공제 + 부가세)
|
||||
```
|
||||
|
||||
두 가지 율의 뜻:
|
||||
- **보험사요율(company_rate)**: 보험사가 이 상품에 주기로 한 비율. **상품 × 회차(차년)**로 정해짐.
|
||||
- **지급률(payout_rate)**: GA가 받은 돈 중 설계사에게 주는 비율. **설계사 등급 × 보험종류 × 회차**로 정해짐. → 같은 계약이라도 **등급 높은 설계사가 더 많이** 받음.
|
||||
|
||||
> 모집수수료와 유지수수료는 **공식이 똑같고**, 회차(commission_year)만 다릅니다. (모집 = 1차년, 유지 = 2차년 이후)
|
||||
|
||||
---
|
||||
|
||||
## 7. 숫자로 끝까지 따라가기 (한 계약의 일생)
|
||||
|
||||
연환산 보험료 **100만 원**짜리 계약 하나가 태어나서 깨질 때까지 따라가 봅시다.
|
||||
|
||||
### (A) 모집수수료 — 계약이 태어났다
|
||||
| 항목 | 값 | 계산 |
|
||||
|---|---|---|
|
||||
| 보험료(연환산) | 1,000,000원 | (가정) |
|
||||
| 보험사요율 | 60% | 상품·1차년 |
|
||||
| **① 보험사 지급액** | **600,000원** | 1,000,000 × 60% |
|
||||
| 지급률(이 설계사 등급) | 75% | 등급·1차년 |
|
||||
| **② 설계사 수수료** | **450,000원** | 600,000 × 75% |
|
||||
| **③ 원천세(3.3%)** | **14,850원** | 450,000 × 3.3% |
|
||||
| **원장에 남는 실수령** | **435,150원** | 450,000 − 14,850 |
|
||||
|
||||
### (B) 분급 — 한 번에 안 주고 7년에 나눠 준다
|
||||
큰 모집수수료(450,000원)는 규제상 7년에 걸쳐 비율대로 나눠 줍니다(35/25/15/10/7/5/3%).
|
||||
|
||||
| 차년 | 비율 | 지급액 |
|
||||
|---|---|---|
|
||||
| 1차년 | 35% | 157,500원 |
|
||||
| 2차년 | 25% | 112,500원 |
|
||||
| 3차년 | 15% | 67,500원 |
|
||||
| … | … | … |
|
||||
| **합계** | **100%** | **450,000원** |
|
||||
|
||||
→ 계약 직후 통장에 들어오는 건 450,000원이 아니라 **1차년분 157,500원(에서 세금 차감)**.
|
||||
|
||||
### (C) 환수 — 고객이 13개월 만에 해지했다
|
||||
유지 13~24개월 구간 환수율 **50%** 적용:
|
||||
```
|
||||
환수액 = 기지급 모집수수료 × 환수율 = 450,000 × 50% = 225,000원 ← 다음 정산에서 (−)로 차감
|
||||
```
|
||||
- 12개월 이내면 100%(전액 환수), 85개월 이상이면 0%(환수 없음).
|
||||
|
||||
### (D) 오버라이드 — 이 설계사의 팀장이 받는 수당
|
||||
```
|
||||
오버라이드 = 하위 실적 × 오버라이드율 = 2,000,000 × 4% = 80,000원 (cap 넘으면 cap까지만)
|
||||
```
|
||||
|
||||
### (E) 수지차 — 회사는 이 계약으로 얼마 남겼나 (★신규)
|
||||
```
|
||||
수입수수료(보험사가 GA에 준 돈) = 1,000,000 × 60% = 600,000원
|
||||
지급수수료(GA가 설계사에 준 돈) = 450,000원
|
||||
수지차(GA 마진) = 600,000 − 450,000 = 150,000원
|
||||
```
|
||||
|
||||
이 한 흐름이 머리에 들어왔다면, 나머지 수수료 종류는 "기준금액 × 율" 변형일 뿐입니다.
|
||||
|
||||
---
|
||||
|
||||
## 8. 그냥 곱하면 안 되는 이유 — 규제 3종
|
||||
|
||||
수수료는 법으로 한도·방식이 정해져 있어, 단순 곱셈 결과를 그대로 줄 수 없습니다.
|
||||
|
||||
1. **1200% 룰** (보험업감독규정): 초년도 모집수수료 총액은 **연납보험료의 1200%**를 못 넘음. 시스템이 누적 지급액을 추적해 초과분을 잘라냄.
|
||||
2. **분급**: 큰 수수료를 7년에 나눠 지급(위 7-B).
|
||||
3. **차등 환수**: 조기 해지 시 유지기간이 짧을수록 많이 환수(위 7-C).
|
||||
|
||||
> 회사마다 세율·한도가 달라도 **코드는 안 고칩니다.** 전부 데이터(`system_config`, `regulatory_limit`, `installment_ratio`, `chargeback_grade`)로 빼놨기 때문에 값만 바꾸면 됩니다.
|
||||
|
||||
---
|
||||
|
||||
## 9. 세금과 공제 — 통장에 적게 들어오는 이유
|
||||
|
||||
설계사에게 주는 돈(gross)에서 **세금을 먼저 떼고(원천징수)**, **공제를 빼면** 실제 입금액(net)이 됩니다.
|
||||
|
||||
| 항목 | 율 | 설명 |
|
||||
|---|---|---|
|
||||
| 사업소득 원천징수 | 3.3% | 일반 설계사(사업소득자) |
|
||||
| 기타소득 원천징수 | 8.8% | 기타소득 유형 |
|
||||
| 지방소득세 | 소득세의 10% | 소득세에 부가 |
|
||||
| 부가가치세 | 10% | 과세사업자가 세금계산서 발행 시 GA가 추가 지급(+) |
|
||||
|
||||
**공제(deduction)**: 미리 준 돈(가지급금) 회수, 대출 상환, **적립금** 등을 그 달 정산액에서 차감.
|
||||
|
||||
```
|
||||
gross − 원천세(소득세+지방세) − 공제 (+부가세, 과세사업자) = net(실지급액) → 계좌이체(펌뱅킹)
|
||||
```
|
||||
|
||||
**예시(과세사업자, 수수료 450,000원):** 소득세 14,850 + 지방세 1,485 빼고, 부가세 45,000 더하면 → **실지급 478,665원.**
|
||||
|
||||
---
|
||||
|
||||
## 10. 한 달이 흘러가는 과정 — 월 정산 파이프라인
|
||||
|
||||
매월 배치가 아래 순서로 돈다고 생각하면 됩니다.
|
||||
|
||||
```
|
||||
보험사 데이터 수신 → 표준포맷 변환 → 대사(검증) →
|
||||
모집수수료 계산 → 유지수수료 계산(승계 반영) → 환수·예외 →
|
||||
오버라이드 계산 → 집계(설계사×월, 세금·공제 반영) →
|
||||
회계 분개 → (분기/연말이면) 세무신고 자료
|
||||
```
|
||||
|
||||
마감은 **단계마감(★신규)**으로 수신→계산→검증→지급 단계별로 잠급니다. 한 달을 닫으면(마감) 더는 못 고치고, 오류는 **정정 전표**로만 바로잡습니다(원본 보존). 설계사가 금액에 이의를 제기하면 **이의신청**으로 받습니다.
|
||||
|
||||
**상태 흐름:** `DRAFT(계산됨) → CONFIRMED(확정) → PAID(지급완료)`. 확정·지급된 건은 재정산해도 안 바뀝니다(보호).
|
||||
|
||||
---
|
||||
|
||||
## 11. 수입 vs 지급, 그리고 수지차 — 회사는 어디서 남기나 (★ 신규 핵심)
|
||||
|
||||
신입이 가장 헷갈리는 지점입니다. 두 방향을 구분하세요.
|
||||
|
||||
| 방향 | 누가 → 누구 | 시스템 용어 |
|
||||
|---|---|---|
|
||||
| **수입(income)** | 보험사 → GA | 수입수수료 |
|
||||
| **지급(payout)** | GA → 설계사 | 모집/유지/… 수수료, 정산 |
|
||||
|
||||
```
|
||||
수지차(마진) = Σ수입수수료 − Σ지급수수료
|
||||
```
|
||||
|
||||
- 수지차가 (+)면 GA가 남긴 것, (−)면 그달 지급이 수입보다 많았던 것(분급·시상 등으로 일시적으로 발생 가능).
|
||||
- 여기에 **본사정산**(GA 자체 수입/비용)까지 합치면 회사 전체 손익이 보입니다.
|
||||
- 우리 시스템의 `수입수수료/수지차` 화면에서 **재계산 버튼**을 누르면 그달 수입 합과 지급 합(settle_master 기준)을 모아 수지차를 계산합니다.
|
||||
|
||||
---
|
||||
|
||||
## 12. 자주 나오는 질문 (FAQ)
|
||||
|
||||
1. **"수수료를 왜 한 번에 안 주죠?"** → 1200% 룰·분급 규제 + 조기해지 환수 리스크 때문. 7년 분할이 표준.
|
||||
2. **"설계사가 그만두면 그 계약 수수료는?"** → 유지수수료는 후임(승계)에게, 모집수수료는 원 설계사에게.
|
||||
3. **"gross인데 통장엔 적게 들어와요."** → 원천세(3.3%) + 공제를 뺀 net이 실지급액. (과세사업자는 부가세가 더해짐)
|
||||
4. **"같은 계약인데 설계사마다 수수료가 달라요."** → 지급률이 **설계사 등급**에 따라 다르기 때문.
|
||||
5. **"수입수수료랑 지급수수료가 헷갈려요."** → 수입 = 보험사가 우리에게 준 돈, 지급 = 우리가 설계사에게 준 돈. 차이가 수지차(마진).
|
||||
6. **"환산보험료는 왜 필요해요?"** → 상품마다 보험료 조건이 달라 그대로 비교하면 불공평. 환산율을 곱해 공통 기준으로 맞춘 게 환산보험료고, 그 합이 인정실적이 되어 시상·등급의 잣대가 됩니다.
|
||||
7. **"표준 세율/한도가 우리 회사랑 달라요."** → 코드 수정 불필요. 데이터(`system_config` 등)만 변경.
|
||||
|
||||
---
|
||||
|
||||
## 13. 용어 빠른 사전
|
||||
|
||||
| 한글 | 영문 | 한 줄 |
|
||||
|---|---|---|
|
||||
| 보험료 | Premium | 고객이 내는 돈. 계산의 출발점 |
|
||||
| 보험금 | Benefit | 사고·만기 때 고객이 받는 돈 |
|
||||
| 회차/차년 | Commission year | 계약 몇 년째. 1차년이 가장 큼 |
|
||||
| 유지율 | Persistency | 13·25개월 뒤 계약 생존율 |
|
||||
| 위촉/해촉 | Appoint/Terminate | 설계사 소속 시작/종료 |
|
||||
| 승계 | Succession | 해촉 시 후임 귀속 전환 |
|
||||
| 보험사요율 | Company rate | 보험사가 GA에 주는 비율 |
|
||||
| 지급률 | Payout rate | GA가 설계사에 주는 비율(등급별) |
|
||||
| 모집수수료 | Recruit | 체결 초년도 수수료(제일 큼) |
|
||||
| 유지수수료 | Maintain | 유지 기간 수수료 |
|
||||
| 수금수수료 | Collection | 보험료 납입 시 |
|
||||
| 갱신/부활수수료 | Renewal/Reinstatement | 갱신·부활 시 |
|
||||
| 오버라이드 | Override | 상위 직책 수당 |
|
||||
| 시상 | Award | 목표 달성 상금 |
|
||||
| 소개/이관수수료 | Referral/Transfer | 소개·이관 대가 |
|
||||
| 정착지원금 | Settling support | 신입 정착 지원금 |
|
||||
| 수입수수료 | Income commission | 보험사가 GA에 준 돈 |
|
||||
| 수지차 | Margin | 수입 − 지급 (GA 마진) |
|
||||
| 환산보험료 | Converted premium | 공통 기준 환산 보험료 |
|
||||
| 인정실적 | Recognized performance | 시상·등급 기준 실적 |
|
||||
| 본사정산 | HQ settlement | GA 자체 수입/비용 정산 |
|
||||
| 적립금 | Reserve fund | 환수 대비 적립·잔액 |
|
||||
| 분급 | Installment | 수수료 7년 분할 |
|
||||
| 차등환수 | Chargeback | 조기 해지 환수 |
|
||||
| 원천징수 | Withholding | 세금 미리 떼기(3.3%) |
|
||||
| 공제 | Deduction | 가지급금 등 차감 |
|
||||
| 단계마감 | Step close | 단계별 정산 잠금 |
|
||||
| 정산 | Settlement | 월별 계산·확정·지급 |
|
||||
| 원장 | Ledger | 계산 최소 단위 기록 |
|
||||
| 명세서 | Statement | 설계사 지급 내역서 |
|
||||
| 펌뱅킹 | Firm banking | 대량 계좌이체 |
|
||||
|
||||
---
|
||||
|
||||
*기준: 한국 보험업감독규정 표준 가정값. 시스템 schema (incar 갭 반영 P7+P8 14개 도메인 포함). 표준값은 데이터로 외부화되어 코드 변경 없이 조정 가능.*
|
||||
*더 깊은 코드/배치/규정 레벨은 [`DOMAIN_KNOWLEDGE.md`](DOMAIN_KNOWLEDGE.md), [`DOMAIN_GAP_P7.md`](DOMAIN_GAP_P7.md), [`DOMAIN_GAP_P8.md`](DOMAIN_GAP_P8.md) 참고.*
|
||||
Reference in New Issue
Block a user