From 6a6ba9ff0e24a6358b79d602482fa183918e74c1 Mon Sep 17 00:00:00 2001 From: GA Pro Date: Wed, 13 May 2026 00:30:19 +0900 Subject: [PATCH] =?UTF-8?q?feat(db):=20V26=20=EA=B7=9C=EC=A0=9C=ED=95=9C?= =?UTF-8?q?=EB=8F=84=20=EB=A7=88=EC=8A=A4=ED=84=B0=20+=201200%=EB=A3=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20(=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20P1-1-a)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 도메인 P1 시작 — 1200%룰 검증의 한도 마스터. Java 동기화는 P1-1-b/c. 신규 테이블 regulatory_limit: - 감독규정 개정 이력 추적 (effective_from/to) - product_category NULL=ALL, 또는 LIFE/ANNUITY/SAVINGS/EXCLUDED_AUTO/EXCLUDED_HEALTH - limit_type: TOTAL_RATIO(1200%), FIRST_YEAR_RATIO(1차년 35%), INSTALLMENT_YEARS(7년) - is_active 부분 인덱스로 활성 한도만 빠르게 조회 기본 데이터 (2024-01-01 기준, 외부화 가능): - TOTAL_RATIO ALL 1200% (보험업감독규정 제5-15조의5) - FIRST_YEAR_RATIO ALL 35% - INSTALLMENT_YEARS ALL 7년 코드그룹: LIMIT_TYPE, LIMIT_UNIT, PRODUCT_CATEGORY 인덱스: - (limit_type, product_category, effective_from DESC) 한도 조회용 - (is_active) WHERE is_active = TRUE 부분 인덱스 ON CONFLICT DO NOTHING으로 재실행 안전. --- .../db/migration/V26__규제한도마스터.sql | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 ga-common/src/main/resources/db/migration/V26__규제한도마스터.sql diff --git a/ga-common/src/main/resources/db/migration/V26__규제한도마스터.sql b/ga-common/src/main/resources/db/migration/V26__규제한도마스터.sql new file mode 100644 index 0000000..46888bb --- /dev/null +++ b/ga-common/src/main/resources/db/migration/V26__규제한도마스터.sql @@ -0,0 +1,65 @@ +-- V26: 규제 한도 마스터 + 1200%룰 기본 데이터 (보험업감독규정 2024년 기준) + +-- ============================================================ +-- 1. regulatory_limit — 감독규정 한도 마스터 (개정 이력 추적) +-- ============================================================ + +CREATE TABLE regulatory_limit ( + limit_id BIGSERIAL PRIMARY KEY, + limit_type VARCHAR(30) NOT NULL, + product_category VARCHAR(30), -- NULL = ALL 상품 적용 + limit_value NUMERIC(10,2) NOT NULL, + unit VARCHAR(10) NOT NULL, -- PERCENT / YEAR + effective_from DATE NOT NULL, + effective_to DATE, -- NULL = 현재 유효 + regulation_ref VARCHAR(100), + description VARCHAR(500), + is_active BOOLEAN NOT NULL DEFAULT TRUE, + created_at TIMESTAMP NOT NULL DEFAULT NOW(), + created_by BIGINT, + updated_at TIMESTAMP, + updated_by BIGINT +); + +CREATE INDEX idx_rl_type_category ON regulatory_limit(limit_type, product_category, effective_from DESC); +CREATE INDEX idx_rl_active ON regulatory_limit(is_active) WHERE is_active = TRUE; + +-- ============================================================ +-- 2. 기본 데이터 INSERT — 2024년 한국 보험업감독규정 표준 +-- ============================================================ + +INSERT INTO regulatory_limit + (limit_type, product_category, limit_value, unit, effective_from, effective_to, regulation_ref, description) +VALUES + ('TOTAL_RATIO', NULL, 1200, 'PERCENT', '2024-01-01', NULL, + '보험업감독규정 제5-15조의5', '총 모집수수료 한도 — 첫 1년 영업보험료의 1200% 이내'), + + ('FIRST_YEAR_RATIO', NULL, 35, 'PERCENT', '2024-01-01', NULL, + '보험업감독규정 제5-15조의5', '1차년도 지급 한도'), + + ('INSTALLMENT_YEARS', NULL, 7, 'YEAR', '2024-01-01', NULL, + '보험업감독규정 제5-15조의5', '분급 연한'); + +-- ============================================================ +-- 3. 공통코드 그룹 +-- ============================================================ + +INSERT INTO common_code_group (group_code, group_name, description, is_system, sort_order) VALUES + ('LIMIT_TYPE', '한도유형', 'TOTAL_RATIO/FIRST_YEAR_RATIO/INSTALLMENT_YEARS', 'Y', 250), + ('LIMIT_UNIT', '한도단위', 'PERCENT/YEAR', 'Y', 260), + ('PRODUCT_CATEGORY', '상품카테고리', 'ALL/LIFE/ANNUITY/SAVINGS/EXCLUDED_AUTO/EXCLUDED_HEALTH', 'Y', 270) +ON CONFLICT (group_code) DO NOTHING; + +INSERT INTO common_code (group_code, code, code_name, code_desc, sort_order) VALUES + ('LIMIT_TYPE', 'TOTAL_RATIO', '총한도비율', '총 모집수수료 한도율 (1200%)', 10), + ('LIMIT_TYPE', 'FIRST_YEAR_RATIO', '1차년도한도', '1차년도 지급 한도율 (35%)', 20), + ('LIMIT_TYPE', 'INSTALLMENT_YEARS', '분급연한', '수수료 분급 기간 (7년)', 30), + ('LIMIT_UNIT', 'PERCENT', '퍼센트', '%', 10), + ('LIMIT_UNIT', 'YEAR', '년', '연도', 20), + ('PRODUCT_CATEGORY', 'ALL', '전체', '모든 상품 공통 적용', 10), + ('PRODUCT_CATEGORY', 'LIFE', '종신', '종신보험', 20), + ('PRODUCT_CATEGORY', 'ANNUITY', '연금', '연금보험', 30), + ('PRODUCT_CATEGORY', 'SAVINGS', '저축', '저축보험', 40), + ('PRODUCT_CATEGORY', 'EXCLUDED_AUTO', '자동차제외', '1200%룰 적용 제외 — 자동차보험', 50), + ('PRODUCT_CATEGORY', 'EXCLUDED_HEALTH', '실손제외', '1200%룰 적용 제외 — 실손의료비', 60) +ON CONFLICT (group_code, code) DO NOTHING;