-- --------------------------------------------------------------------------- -- cl 모듈 (마감/closing) - 일/월/분기/연 마감 로그 + 스냅샷 + 기간잠금 (prefix 45) -- Loaded after 40-lg.sql by docker-entrypoint-initdb.d. -- cl 서비스/배치가 채우는 마감이력(close_log) + 마감스냅샷(snapshot) 테이블. -- --------------------------------------------------------------------------- -- 마감 이력 (close_log) - 하나의 마감 실행(일/월/분기/연/중간)의 헤더 CREATE SEQUENCE IF NOT EXISTS cl_close_seq; CREATE TABLE IF NOT EXISTS cl_close_log ( close_id BIGINT PRIMARY KEY, close_type TEXT NOT NULL, -- DAILY/MONTHLY/QUARTER/YEAREND/MID period_key TEXT NOT NULL, -- YYYY-MM-DD / YYYY-MM / YYYY-Qn / YYYY biz_date DATE NOT NULL, status TEXT NOT NULL DEFAULT 'O', -- O=개시, C=마감완료, R=재마감, A=승인, L=잠금, X=취소 txn_count BIGINT NOT NULL DEFAULT 0, total_amount BIGINT NOT NULL DEFAULT 0, memo TEXT NOT NULL DEFAULT '', created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS ix_cl_close_period ON cl_close_log(close_type, period_key); -- 마감 스냅샷 (snapshot) - 마감 시점 가맹점별 집계 고정 CREATE SEQUENCE IF NOT EXISTS cl_snapshot_seq; CREATE TABLE IF NOT EXISTS cl_snapshot ( snapshot_id BIGINT PRIMARY KEY, close_id BIGINT NOT NULL, period_key TEXT NOT NULL, biz_date DATE NOT NULL, merchant_id TEXT NOT NULL, gross_amount BIGINT NOT NULL DEFAULT 0, fee_amount BIGINT NOT NULL DEFAULT 0, net_amount BIGINT NOT NULL DEFAULT 0, txn_count BIGINT NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS ix_cl_snapshot_close ON cl_snapshot(close_id); -- 기간 잠금 (period lock) - 마감된 기간의 추가 정정 차단 CREATE TABLE IF NOT EXISTS cl_period_lock ( period_key TEXT PRIMARY KEY, locked BOOLEAN NOT NULL DEFAULT true, locked_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- 마감 시퀀스 관리 (close_type 별 마지막 순번) CREATE TABLE IF NOT EXISTS cl_seq_reg ( close_type TEXT PRIMARY KEY, last_seq BIGINT NOT NULL DEFAULT 0, updated_at TIMESTAMPTZ NOT NULL DEFAULT now() );