bfc724669b
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>
73 lines
4.4 KiB
SQL
73 lines
4.4 KiB
SQL
-- V89: 소개·이관수수료 (referral_commission_rule + referral_commission_ledger)
|
||
-- 계약을 소개(REFERRAL)하거나 이관(TRANSFER)한 설계사에게 지급하는 수수료.
|
||
-- 정률(RATE): commission_amount = base_amount × commission_rate
|
||
-- 정액(FIXED): commission_amount = fixed_amount
|
||
|
||
-- ============================================================
|
||
-- 1. referral_commission_rule — 소개·이관수수료 룰 마스터
|
||
-- ============================================================
|
||
|
||
CREATE TABLE referral_commission_rule (
|
||
rule_id BIGSERIAL PRIMARY KEY,
|
||
referral_type VARCHAR(20) NOT NULL,
|
||
calc_type VARCHAR(10) NOT NULL,
|
||
commission_rate NUMERIC(7,4),
|
||
fixed_amount NUMERIC(15,2),
|
||
effective_from DATE NOT NULL,
|
||
effective_to DATE,
|
||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
created_by BIGINT,
|
||
updated_at TIMESTAMP,
|
||
CHECK (referral_type IN ('REFERRAL','TRANSFER')),
|
||
CHECK (calc_type IN ('RATE','FIXED')),
|
||
CHECK (commission_rate IS NULL OR (commission_rate >= 0 AND commission_rate <= 1)),
|
||
CHECK (fixed_amount IS NULL OR fixed_amount >= 0)
|
||
);
|
||
|
||
COMMENT ON TABLE referral_commission_rule IS '소개·이관수수료 룰 마스터 — 소개/이관 유형별 수수료율 또는 정액 정의';
|
||
COMMENT ON COLUMN referral_commission_rule.rule_id IS '룰 PK';
|
||
COMMENT ON COLUMN referral_commission_rule.referral_type IS '유형 (REFERRAL=소개 / TRANSFER=이관)';
|
||
COMMENT ON COLUMN referral_commission_rule.calc_type IS '계산방식 (RATE=정률 / FIXED=정액)';
|
||
COMMENT ON COLUMN referral_commission_rule.commission_rate IS '정률 요율 (소수, calc_type=RATE 일 때 사용)';
|
||
COMMENT ON COLUMN referral_commission_rule.fixed_amount IS '정액 금액 (calc_type=FIXED 일 때 사용)';
|
||
COMMENT ON COLUMN referral_commission_rule.effective_from IS '적용 시작일';
|
||
COMMENT ON COLUMN referral_commission_rule.effective_to IS '적용 종료일 (NULL=현재 유효)';
|
||
|
||
CREATE INDEX idx_rfcr_type_from ON referral_commission_rule(referral_type, effective_from);
|
||
|
||
-- ============================================================
|
||
-- 2. referral_commission_ledger — 소개·이관수수료 원장
|
||
-- ============================================================
|
||
|
||
CREATE TABLE referral_commission_ledger (
|
||
ledger_id BIGSERIAL PRIMARY KEY,
|
||
contract_id BIGINT NOT NULL REFERENCES contract(contract_id),
|
||
referrer_agent_id BIGINT NOT NULL REFERENCES agent(agent_id),
|
||
settle_month CHAR(6) NOT NULL,
|
||
referral_type VARCHAR(20) NOT NULL,
|
||
base_amount NUMERIC(15,2) NOT NULL,
|
||
commission_rate NUMERIC(7,4),
|
||
commission_amount NUMERIC(15,2) NOT NULL,
|
||
status VARCHAR(20) NOT NULL DEFAULT 'CALCULATED',
|
||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMP,
|
||
CHECK (referral_type IN ('REFERRAL','TRANSFER')),
|
||
CHECK (status IN ('CALCULATED','CONFIRMED','CANCELLED')),
|
||
CHECK (base_amount >= 0),
|
||
CHECK (commission_amount >= 0)
|
||
);
|
||
|
||
COMMENT ON TABLE referral_commission_ledger IS '소개·이관수수료 원장 — 소개/이관 설계사에게 지급하는 수수료 발생 이력';
|
||
COMMENT ON COLUMN referral_commission_ledger.ledger_id IS '원장 PK';
|
||
COMMENT ON COLUMN referral_commission_ledger.contract_id IS '대상 계약 FK';
|
||
COMMENT ON COLUMN referral_commission_ledger.referrer_agent_id IS '소개/이관한 설계사 FK';
|
||
COMMENT ON COLUMN referral_commission_ledger.settle_month IS '정산 귀속월 (YYYYMM)';
|
||
COMMENT ON COLUMN referral_commission_ledger.referral_type IS '유형 (REFERRAL=소개 / TRANSFER=이관)';
|
||
COMMENT ON COLUMN referral_commission_ledger.base_amount IS '기준금액 (수수료 또는 보험료)';
|
||
COMMENT ON COLUMN referral_commission_ledger.commission_rate IS '적용 정률 요율 (RATE 방식 시)';
|
||
COMMENT ON COLUMN referral_commission_ledger.commission_amount IS '수수료액 = base×rate (RATE) 또는 fixed_amount (FIXED)';
|
||
COMMENT ON COLUMN referral_commission_ledger.status IS '상태 (CALCULATED/CONFIRMED/CANCELLED)';
|
||
|
||
CREATE INDEX idx_rfcl_agent_month ON referral_commission_ledger(referrer_agent_id, settle_month);
|
||
CREATE INDEX idx_rfcl_contract ON referral_commission_ledger(contract_id);
|