-- V31: 수수료 이의신청 (commission_dispute)

-- ============================================================
-- 1. commission_dispute — 이의신청 마스터
-- ============================================================

CREATE TABLE commission_dispute (
    dispute_id      BIGSERIAL       PRIMARY KEY,
    agent_id        BIGINT          NOT NULL REFERENCES agent(agent_id),
    settle_month    CHAR(6)         NOT NULL,               -- 대상 정산년월 (YYYYMM)
    settle_id       BIGINT          REFERENCES settle_master(settle_id), -- 연관 정산 (선택)
    status          VARCHAR(20)     NOT NULL DEFAULT 'OPEN', -- OPEN/IN_REVIEW/APPROVED/REJECTED
    disputed_amount NUMERIC(15,2),                          -- 이의 제기 금액 (NULL=전체)
    claim_amount    NUMERIC(15,2),                          -- 설계사 주장 금액
    reason          VARCHAR(2000)   NOT NULL,               -- 이의 신청 사유
    evidence_url    VARCHAR(500),                           -- 증빙 자료 URL (첨부파일)
    reviewer_id     BIGINT,                                 -- 검토 담당자
    reviewed_at     TIMESTAMP,                              -- 검토 시작 일시
    resolved_by     BIGINT,                                 -- 최종 처리자
    resolved_at     TIMESTAMP,                              -- 최종 처리 일시
    resolution      VARCHAR(2000),                          -- 처리 결과 상세
    adjustment_amount NUMERIC(15,2),                        -- 인정된 조정 금액 (APPROVED 시)
    correction_id   BIGINT          REFERENCES settle_correction(correction_id), -- 연계 정정건
    created_at      TIMESTAMP       NOT NULL DEFAULT NOW(),
    updated_at      TIMESTAMP
);

COMMENT ON TABLE  commission_dispute                IS '수수료 이의신청 — 설계사가 정산 결과에 이의를 제기하는 프로세스';
COMMENT ON COLUMN commission_dispute.agent_id       IS '이의신청 설계사';
COMMENT ON COLUMN commission_dispute.settle_month   IS '이의 대상 정산년월 (YYYYMM)';
COMMENT ON COLUMN commission_dispute.status         IS 'OPEN/IN_REVIEW/APPROVED/REJECTED';
COMMENT ON COLUMN commission_dispute.disputed_amount IS '이의 제기 금액 (NULL=전체 정산)';
COMMENT ON COLUMN commission_dispute.claim_amount   IS '설계사가 주장하는 정당 금액';
COMMENT ON COLUMN commission_dispute.adjustment_amount IS 'APPROVED 시 실제 인정된 조정 금액';
COMMENT ON COLUMN commission_dispute.correction_id  IS '이의신청 결과로 생성된 정정건 참조';

CREATE INDEX idx_cd_agent   ON commission_dispute(agent_id, settle_month);
CREATE INDEX idx_cd_status  ON commission_dispute(status, created_at DESC);
CREATE INDEX idx_cd_settle  ON commission_dispute(settle_id);

-- ============================================================
-- 2. 공통코드 DISPUTE_STATUS
-- ============================================================

INSERT INTO common_code_group (group_code, group_name, description, is_system, sort_order) VALUES
    ('DISPUTE_STATUS', '이의신청상태', 'OPEN/IN_REVIEW/APPROVED/REJECTED', 'Y', 320)
ON CONFLICT (group_code) DO NOTHING;

INSERT INTO common_code (group_code, code, code_name, code_desc, sort_order) VALUES
    ('DISPUTE_STATUS', 'OPEN',      '접수',   '이의신청 접수 (검토 전)',           10),
    ('DISPUTE_STATUS', 'IN_REVIEW', '검토중', '담당자 검토 진행 중',               20),
    ('DISPUTE_STATUS', 'APPROVED',  '인정',   '이의신청 인정 — 정정 처리 진행',   30),
    ('DISPUTE_STATUS', 'REJECTED',  '기각',   '이의신청 기각 — 원 정산 유지',     40)
ON CONFLICT (group_code, code) DO NOTHING;
