동기화
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
-- V41: 수금수수료 (collection_commission_rule + collection_commission_ledger)
|
||||
-- 보험료 수납 단위(매월)로 발생하는 수금수수료. 납입주기별 차등 적용.
|
||||
|
||||
-- ============================================================
|
||||
-- 1. collection_commission_rule — 납입주기별 수금수수료율 마스터
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE collection_commission_rule (
|
||||
rule_id BIGSERIAL PRIMARY KEY,
|
||||
product_id BIGINT NOT NULL REFERENCES product(product_id),
|
||||
payment_cycle VARCHAR(20) NOT NULL,
|
||||
commission_rate NUMERIC(7,4) NOT NULL,
|
||||
effective_from DATE NOT NULL,
|
||||
effective_to DATE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
created_by BIGINT,
|
||||
updated_at TIMESTAMP,
|
||||
UNIQUE (product_id, payment_cycle, effective_from),
|
||||
CHECK (payment_cycle IN ('MONTHLY','QUARTERLY','SEMI','ANNUAL')),
|
||||
CHECK (commission_rate >= 0 AND commission_rate <= 1)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE collection_commission_rule IS '수금수수료율 마스터 — 상품/납입주기별 수금수수료율 정의';
|
||||
COMMENT ON COLUMN collection_commission_rule.product_id IS '적용 상품 FK';
|
||||
COMMENT ON COLUMN collection_commission_rule.payment_cycle IS '납입주기 (MONTHLY=월납/QUARTERLY=분기납/SEMI=반기납/ANNUAL=연납)';
|
||||
COMMENT ON COLUMN collection_commission_rule.commission_rate IS '수금수수료율 (소수, 예: 0.005 = 0.5%)';
|
||||
COMMENT ON COLUMN collection_commission_rule.effective_from IS '적용 시작일';
|
||||
COMMENT ON COLUMN collection_commission_rule.effective_to IS '적용 종료일 (NULL=현재 유효)';
|
||||
|
||||
CREATE INDEX idx_ccr_product ON collection_commission_rule(product_id, effective_from);
|
||||
|
||||
-- ============================================================
|
||||
-- 2. collection_commission_ledger — 수금수수료 원장
|
||||
-- 매월 수납 확인 후 발생. paid_at 기준으로 정산월 귀속.
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE collection_commission_ledger (
|
||||
ledger_id BIGSERIAL PRIMARY KEY,
|
||||
contract_id BIGINT NOT NULL REFERENCES contract(contract_id),
|
||||
agent_id BIGINT NOT NULL REFERENCES agent(agent_id),
|
||||
settle_month CHAR(6) NOT NULL,
|
||||
premium_amount NUMERIC(15,2) NOT NULL,
|
||||
commission_rate NUMERIC(7,4) NOT NULL,
|
||||
commission_amount NUMERIC(15,2) NOT NULL,
|
||||
payment_cycle VARCHAR(20) NOT NULL,
|
||||
paid_at DATE NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'CALCULATED',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP,
|
||||
CHECK (payment_cycle IN ('MONTHLY','QUARTERLY','SEMI','ANNUAL')),
|
||||
CHECK (status IN ('CALCULATED','CONFIRMED','PAID','CANCELLED'))
|
||||
);
|
||||
|
||||
COMMENT ON TABLE collection_commission_ledger IS '수금수수료 원장 — 매월 보험료 수납 단위로 발생';
|
||||
COMMENT ON COLUMN collection_commission_ledger.contract_id IS '대상 계약 FK';
|
||||
COMMENT ON COLUMN collection_commission_ledger.agent_id IS '수금 담당 설계사 FK';
|
||||
COMMENT ON COLUMN collection_commission_ledger.settle_month IS '정산 귀속월 (YYYYMM)';
|
||||
COMMENT ON COLUMN collection_commission_ledger.premium_amount IS '수납 보험료';
|
||||
COMMENT ON COLUMN collection_commission_ledger.commission_rate IS '적용 수금수수료율';
|
||||
COMMENT ON COLUMN collection_commission_ledger.commission_amount IS '수금수수료 = premium_amount * commission_rate';
|
||||
COMMENT ON COLUMN collection_commission_ledger.payment_cycle IS '납입주기';
|
||||
COMMENT ON COLUMN collection_commission_ledger.paid_at IS '실 보험료 납입일';
|
||||
|
||||
CREATE INDEX idx_ccl_agent_month ON collection_commission_ledger(agent_id, settle_month);
|
||||
CREATE INDEX idx_ccl_contract ON collection_commission_ledger(contract_id);
|
||||
CREATE INDEX idx_ccl_status ON collection_commission_ledger(status, settle_month);
|
||||
Reference in New Issue
Block a user