Files
ga-commission-system/ga-common/src/main/resources/db/migration/V125__환수채권연체이자.sql
T

43 lines
2.4 KiB
SQL
Raw Normal View History

-- V125: 환수채권 연체이자 (overdue interest on clawback receivables)
-- 미수 환수채권이 이월될 때 연체기간만큼 단리 연체이자를 월별 적립한다.
-- 이자율 0(기본값) 이면 적립 없음 — 기존 동작과 동일(안전 폴백).
-- ============================================================
-- 1. clawback_receivable 누적 연체이자 컬럼
-- ============================================================
ALTER TABLE clawback_receivable
ADD COLUMN accrued_interest NUMERIC(15,2) NOT NULL DEFAULT 0;
COMMENT ON COLUMN clawback_receivable.accrued_interest IS '누적 연체이자 (단리, balance 에 포함되어 회수/상계됨)';
-- ============================================================
-- 2. clawback_interest (월별 연체이자 적립 이력 — 멱등 reverse용)
-- ============================================================
CREATE TABLE clawback_interest (
interest_id BIGSERIAL PRIMARY KEY,
receivable_id BIGINT NOT NULL REFERENCES clawback_receivable(receivable_id),
settle_month CHAR(6) NOT NULL,
interest_amount NUMERIC(15,2) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
CONSTRAINT uq_clawback_interest UNIQUE (receivable_id, settle_month)
);
COMMENT ON TABLE clawback_interest IS '환수채권 월별 연체이자 적립 이력';
COMMENT ON COLUMN clawback_interest.receivable_id IS '환수채권 ID';
COMMENT ON COLUMN clawback_interest.settle_month IS '적립 정산월(YYYYMM)';
COMMENT ON COLUMN clawback_interest.interest_amount IS '당월 적립 연체이자(원금잔액 × 월이자율)';
CREATE INDEX idx_clawback_interest_settle_month ON clawback_interest (settle_month);
-- ============================================================
-- 3. system_config 시드 — 연체이자율 / 거치기간
-- 기본값 0 → 적립 없음(기존 동작 보존). 운영정책에 맞게 수정.
-- ============================================================
INSERT INTO system_config (config_key, config_value, config_group, value_type, description) VALUES
('CLAWBACK_OVERDUE_INTEREST_RATE', '0', 'COMMISSION', 'NUMBER', '환수채권 연 연체이자율(%) — 0이면 미적립'),
('CLAWBACK_INTEREST_GRACE_MONTHS', '0', 'COMMISSION', 'NUMBER', '환수채권 연체이자 거치기간(개월) — 발생 후 N개월 경과부터 적립')
ON CONFLICT (config_key) DO NOTHING;