-- 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;
