-- 킨텍스 — M9 확장: F085 환불·취소 규정 + F083 세금계산서 (멱등)
-- FEATURE_GAP:
--   F085 환불·취소 = 취소 시점 D-일(행사 개막일 기준) 구간별 환불율(룰셋 rulesets/refund-v1.0.json).
--        청구 취소 시 status='cancelled' + 환불 레코드(invoice_refund) 기록. 실 PG 환불 없음(G2 재무 게이트).
--   F083 세금계산서 = 청구서 기반 세금계산서 데이터 문서(tax_invoice) 발행·조회. 국세청 전송 없음(G2 게이트).
-- 보안 불변: 본 마이그레이션은 V34 단독. V1~V33 및 타 팀 마이그레이션을 변경하지 않는다. 전부 멱등.
-- 멀티테넌시 표준(소유자 지시 2026-07-12): 신규 테넌트 소유 테이블은 tenant_id DEFAULT 'KINTEX' + PK (tenant_id, id) + UNIQUE(id).

-- 1) invoice 취소 메타 순증 (F085) — 기존 상태에 'cancelled' 추가(체크 제약 없음, 값만 확장) ----
ALTER TABLE invoice ADD COLUMN IF NOT EXISTS cancelled_at  timestamptz;
ALTER TABLE invoice ADD COLUMN IF NOT EXISTS cancel_reason varchar(500);
COMMENT ON COLUMN invoice.cancelled_at  IS 'F085 취소 확정 시각(status=cancelled)';
COMMENT ON COLUMN invoice.cancel_reason IS 'F085 취소 사유(표시용, 민감정보 아님)';

-- 2) 환불 레코드(InvoiceRefund) — 청구 취소당 환불 산정 근거 1건 (F085) --------------------
--    base_amount = 실 납입액(paid_amount) 기준. refund = base × rate/100, forfeit = base − refund.
--    status='recorded' = 산정·기록만(PG 미집행). 후속 재무 집행 시 'settled' 전환 여지.
CREATE TABLE IF NOT EXISTS invoice_refund (
    tenant_id           varchar(40)  NOT NULL DEFAULT 'KINTEX',
    id                  varchar(40)  NOT NULL,
    invoice_id          varchar(40)  NOT NULL REFERENCES invoice(id) ON DELETE CASCADE,
    event_id            varchar(40)  NOT NULL,
    base_amount         bigint       NOT NULL DEFAULT 0,        -- 환불 산정 기준(실 납입액)
    refund_rate_percent numeric(5,2) NOT NULL DEFAULT 0,        -- 적용 환불율(%)
    refund_amount       bigint       NOT NULL DEFAULT 0,        -- 환불액 = base × rate/100
    forfeit_amount      bigint       NOT NULL DEFAULT 0,        -- 공제·위약액 = base − refund
    days_before_event   integer,                                -- 취소 시점 D-일(음수=행사 후, null=개막일 미정)
    bracket_label       varchar(80),                            -- 적용 구간 라벨
    reason              varchar(500),
    ruleset_version     varchar(40),                            -- refund-v1.0
    status              varchar(20)  NOT NULL DEFAULT 'recorded', -- recorded(기록·PG 미집행) | settled(후속)
    created_by          varchar(40),
    created_at          timestamptz  NOT NULL DEFAULT now(),
    UNIQUE (id),
    PRIMARY KEY (tenant_id, id)
);
CREATE INDEX IF NOT EXISTS idx_invoice_refund_invoice ON invoice_refund (invoice_id);
CREATE INDEX IF NOT EXISTS idx_invoice_refund_event   ON invoice_refund (event_id);
COMMENT ON TABLE invoice_refund IS 'F085 청구 취소·환불 산정 레코드 — 규정(refund-v1.0) 기준 서버 산정. 실 PG 환불 없음(G2 게이트)';

-- 3) 세금계산서(TaxInvoice) — 청구서당 1건(멱등). 공급자=킨텍스 상수, 공급받는자=참가업체 (F083) ----
--    supplier_biz_no·supplier_ceo 는 재무 확정 전 플레이스홀더(G2). 국세청 전송 없음(status=issued=문서 발행).
CREATE TABLE IF NOT EXISTS tax_invoice (
    tenant_id       varchar(40)  NOT NULL DEFAULT 'KINTEX',
    id              varchar(40)  NOT NULL,
    invoice_id      varchar(40)  NOT NULL REFERENCES invoice(id) ON DELETE CASCADE,
    event_id        varchar(40)  NOT NULL,
    tax_invoice_no  varchar(40)  NOT NULL,
    supplier_name   varchar(200) NOT NULL,                      -- 공급자(킨텍스)
    supplier_biz_no varchar(20),                                -- 사업자등록번호(재무 확정 전 플레이스홀더)
    supplier_ceo    varchar(60),                                -- 대표자(재무 확정 전 플레이스홀더)
    supplier_addr   varchar(300),
    buyer_name      varchar(200) NOT NULL,                      -- 공급받는자(참가업체 표시명)
    supply_amount   bigint       NOT NULL DEFAULT 0,            -- 공급가액(invoice.subtotal 스냅샷)
    vat             bigint       NOT NULL DEFAULT 0,
    total           bigint       NOT NULL DEFAULT 0,
    item_summary    varchar(300),
    status          varchar(20)  NOT NULL DEFAULT 'issued',     -- issued(문서 발행·국세청 미전송) | void
    issued_at       timestamptz  NOT NULL DEFAULT now(),
    issued_by       varchar(40),
    created_at      timestamptz  NOT NULL DEFAULT now(),
    UNIQUE (id),
    UNIQUE (invoice_id),                                        -- 청구서당 세금계산서 1건(멱등)
    PRIMARY KEY (tenant_id, id)
);
CREATE INDEX IF NOT EXISTS idx_tax_invoice_event ON tax_invoice (event_id);
COMMENT ON TABLE tax_invoice IS 'F083 세금계산서 데이터 문서 — 청구서 기반. 국세청 전자세금계산서 전송은 별도(G2 게이트)';
