Files
ga-commission-system/ga-common/src/main/resources/db/migration/V53__출금신청.sql
T

46 lines
2.8 KiB
SQL
Raw Normal View History

2026-05-14 01:21:27 +09:00
-- V53: 출금 신청 (withdraw_request)
-- 정산 확정 후 설계사 수수료 출금 신청 → 결재 → 펌뱅킹 송신 → 결과 반영.
-- account_no는 AES 암호화 대상 (애플리케이션 EncryptTypeHandler 처리).
CREATE TABLE withdraw_request (
request_id BIGSERIAL PRIMARY KEY,
settle_master_id BIGINT NOT NULL REFERENCES settle_master(settle_id),
agent_id BIGINT NOT NULL REFERENCES agent(agent_id),
amount NUMERIC(15,2) NOT NULL,
requested_by BIGINT NOT NULL,
-- 신청자 user_id (느슨한 참조)
requested_at TIMESTAMP NOT NULL DEFAULT NOW(),
approval_request_id BIGINT REFERENCES approval_request(request_id),
bank_code VARCHAR(10) NOT NULL,
account_no VARCHAR(200) NOT NULL,
-- AES 암호화 대상 (EncryptTypeHandler)
status VARCHAR(20) NOT NULL DEFAULT 'REQUESTED',
sent_at TIMESTAMP,
-- 펌뱅킹 송신 시각
completed_at TIMESTAMP,
-- 입금 완료 시각
fail_reason VARCHAR(500),
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP,
CHECK (amount > 0),
CHECK (status IN ('REQUESTED','APPROVED','SENT','COMPLETED','FAILED','CANCELLED'))
);
COMMENT ON TABLE withdraw_request IS '출금 신청 — 정산 확정 후 수수료 출금 결재→펌뱅킹→완료 워크플로우';
COMMENT ON COLUMN withdraw_request.settle_master_id IS '출금 기준 정산 FK (settle_master)';
COMMENT ON COLUMN withdraw_request.agent_id IS '출금 대상 설계사 FK';
COMMENT ON COLUMN withdraw_request.amount IS '출금 신청 금액';
COMMENT ON COLUMN withdraw_request.requested_by IS '신청자 user_id';
COMMENT ON COLUMN withdraw_request.approval_request_id IS '결재 요청 FK (approval_request)';
COMMENT ON COLUMN withdraw_request.bank_code IS '출금 은행 코드';
COMMENT ON COLUMN withdraw_request.account_no IS '출금 계좌번호 (AES 암호화, EncryptTypeHandler 처리)';
COMMENT ON COLUMN withdraw_request.status IS 'REQUESTED=신청/APPROVED=결재완료/SENT=펌뱅킹송신/COMPLETED=입금완료/FAILED=실패/CANCELLED=취소';
COMMENT ON COLUMN withdraw_request.sent_at IS '펌뱅킹 송신 시각';
COMMENT ON COLUMN withdraw_request.completed_at IS '입금 완료 확인 시각';
COMMENT ON COLUMN withdraw_request.fail_reason IS '실패 사유 (FAILED 상태 시)';
CREATE INDEX idx_wr_agent_status ON withdraw_request(agent_id, status);
CREATE INDEX idx_wr_settle ON withdraw_request(settle_master_id);
CREATE INDEX idx_wr_status_date ON withdraw_request(status, requested_at);
CREATE INDEX idx_wr_approval ON withdraw_request(approval_request_id);