feat: 수수료 갭 보완 4종 — 지급보류/환수원천세역분개/연체이자/간이지급명세서 (V124~V126)
감사(서브에이전트 3영역)로 발견한 실제 결함/규제 갭만 선별 보완.
- A 지급보류(HOLD) 지급배치 누락 버그: PaymentBatchItemMapper.insertFromSettleMaster
status NOT IN('PAID','HOLD') — 보류건이 지급배치에 포함되어 실제 이체되던 결함 수정
- B 환수 원천세 역분개: withholding_tax_adjustment(V124) 멱등 적재 +
분기 원천세신고 집계 netting(payment UNION ALL adjustment). settle_master 금액흐름 불변
- C 환수채권 연체이자: clawback_receivable.accrued_interest + clawback_interest(V125) +
ClawbackInterestCalculator(연율/1200), config 기본 0 = 안전폴백, 기존 FIFO 상계가 이자 회수
- D 사업소득 간이지급명세서(월별): commission_statement(MONTHLY) 위 읽기전용 리포트 +
메뉴 REPORT_SIMPLIFIED_PAYMENT(V126) + 프론트 SimplifiedPaymentReport
검증: ./gradlew build 전모듈 GREEN, 신규 단위테스트 6건, ga-frontend tsc -b PASS,
Flyway V124~V126 운영DB 적용(v126), 적대리뷰 APPROVED(LOW 1건 GREATEST 클램프 즉수정),
B/C/D 라이브DB 검증(롤백) + D admin e2e list/export 200.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user