From 0e73eb61a943f55e879a9ef04bf43412eb808f5b Mon Sep 17 00:00:00 2001 From: GA Pro Date: Wed, 13 May 2026 00:02:05 +0900 Subject: [PATCH] =?UTF-8?q?feat(db):=20V24=20=EA=B3=B5=EC=A0=9C/=EC=B0=A8?= =?UTF-8?q?=EA=B0=90=20=EC=8A=A4=ED=82=A4=EB=A7=88=20+=20=EC=B0=A8?= =?UTF-8?q?=EA=B0=90=20=EC=BD=94=EB=93=9C=EA=B7=B8=EB=A3=B9=20(=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20P0-2-a)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 도메인 P0 두번째 항목 — 공제/차감. 본 커밋은 DB 스키마/데이터만. ga-core/ga-api 동기화는 P0-2-b/c. 신규 테이블: - agent_deduction (월별 차감 마스터) - UNIQUE (agent_id, settle_month, deduction_type) - PENDING/APPLIED/CANCELLED 상태 - payment_deduction_detail (이체 시 적용된 차감 명세) payment 컬럼 추가: - deduction_amount NUMERIC(15,2) DEFAULT 0 (차감 합계) - net_amount 공식은 P0-2-c에서 (amount - tax - deduction + vat)로 갱신 예정 common_code 코드그룹: - DEDUCTION_TYPE: LOAN, ADVANCE, GUARANTEE, DUES, AD, CHARGEBACK_PENDING, OTHER - DEDUCTION_STATUS: PENDING, APPLIED, CANCELLED 인덱스: - agent_deduction (settle_month, agent_id) 복합 - payment_deduction_detail (payment_id) ON CONFLICT DO NOTHING으로 재실행 안전. --- .../resources/db/migration/V24__공제차감.sql | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 ga-common/src/main/resources/db/migration/V24__공제차감.sql diff --git a/ga-common/src/main/resources/db/migration/V24__공제차감.sql b/ga-common/src/main/resources/db/migration/V24__공제차감.sql new file mode 100644 index 0000000..d6d4458 --- /dev/null +++ b/ga-common/src/main/resources/db/migration/V24__공제차감.sql @@ -0,0 +1,66 @@ +-- V24: 공제/차감 도메인 (agent_deduction, payment_deduction_detail, payment 확장, 공통코드) + +-- ============================================================ +-- 1. agent_deduction — 월별 차감 마스터 +-- ============================================================ + +CREATE TABLE agent_deduction ( + deduction_id BIGSERIAL PRIMARY KEY, + agent_id BIGINT NOT NULL REFERENCES agent(agent_id), + settle_month CHAR(6) NOT NULL, + deduction_type VARCHAR(20) NOT NULL, + amount NUMERIC(15,2) NOT NULL DEFAULT 0, + description VARCHAR(255), + status VARCHAR(20) NOT NULL DEFAULT 'PENDING', + created_at TIMESTAMP NOT NULL DEFAULT NOW(), + created_by BIGINT, + updated_at TIMESTAMP, + updated_by BIGINT, + UNIQUE (agent_id, settle_month, deduction_type) +); + +CREATE INDEX idx_ad_month_agent ON agent_deduction(settle_month, agent_id); + +-- ============================================================ +-- 2. payment_deduction_detail — 이체 시 적용된 차감 명세 +-- ============================================================ + +CREATE TABLE payment_deduction_detail ( + detail_id BIGSERIAL PRIMARY KEY, + payment_id BIGINT NOT NULL REFERENCES payment(payment_id), + deduction_type VARCHAR(20) NOT NULL, + amount NUMERIC(15,2) NOT NULL, + description VARCHAR(255), + applied_at TIMESTAMP NOT NULL DEFAULT NOW() +); + +CREATE INDEX idx_pdd_payment ON payment_deduction_detail(payment_id); + +-- ============================================================ +-- 3. payment 테이블 차감 합계 컬럼 추가 +-- ============================================================ + +ALTER TABLE payment + ADD COLUMN deduction_amount NUMERIC(15,2) NOT NULL DEFAULT 0; + +-- ============================================================ +-- 4. 공통코드 그룹 DEDUCTION_TYPE 추가 +-- ============================================================ + +INSERT INTO common_code_group (group_code, group_name, description, is_system, sort_order) VALUES + ('DEDUCTION_TYPE', '차감유형', 'LOAN/ADVANCE/GUARANTEE/DUES/AD/CHARGEBACK_PENDING/OTHER', 'Y', 210), + ('DEDUCTION_STATUS', '차감상태', 'PENDING/APPLIED/CANCELLED', 'Y', 220) +ON CONFLICT (group_code) DO NOTHING; + +INSERT INTO common_code (group_code, code, code_name, code_desc, sort_order) VALUES + ('DEDUCTION_TYPE', 'LOAN', '대출잔액', '설계사 대출 미상환 잔액', 10), + ('DEDUCTION_TYPE', 'ADVANCE', '가불금', '선지급 후 정산 차감', 20), + ('DEDUCTION_TYPE', 'GUARANTEE', '신원보증보험료', '신원보증보험 납부액', 30), + ('DEDUCTION_TYPE', 'DUES', '협회비', '보험협회 등 협회비', 40), + ('DEDUCTION_TYPE', 'AD', '광고비/판촉비', '광고 및 판촉 활동 비용', 50), + ('DEDUCTION_TYPE', 'CHARGEBACK_PENDING', '미회수환수금', '환수 분할 미처리 잔액', 60), + ('DEDUCTION_TYPE', 'OTHER', '기타', '기타 차감 항목', 70), + ('DEDUCTION_STATUS', 'PENDING', '대기', '차감 등록 후 미적용 상태', 10), + ('DEDUCTION_STATUS', 'APPLIED', '적용됨', '이체 시 차감 완료', 20), + ('DEDUCTION_STATUS', 'CANCELLED', '취소', '차감 취소 처리됨', 30) +ON CONFLICT (group_code, code) DO NOTHING;