46 lines
2.8 KiB
SQL
46 lines
2.8 KiB
SQL
-- 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);
|