- 10개 모듈 추가/확장(au py rc st lg cl mm vl mg cm), 각 30 서비스 = 330 + tmsrv - build.sh 자동발견으로 11 모듈서버 + dbio 라이브러리 23 + 배치 22 빌드 - schema.d 11파일 → 75 테이블, 모듈별 disjoint - 부팅 리소스 규명: fs.mqueue.queues_max=8192(330큐>256), NDRX_MSGSIZEMAX 16000· MSGMAX 50(큐당 5.6MB→0.8MB), msgqueue ulimit 2GB → 전 12서버 runok - 검증: xadmin psc 333 AVAIL, 매입체인 XA 커밋, prepared_xacts=0 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
110 lines
4.8 KiB
SQL
110 lines
4.8 KiB
SQL
-- py 모듈 (지급) 스키마 - 지급 원장 / 지급계좌 / 지급파일 / 예약 / 조정 / 집계
|
|
-- Loaded into PostgreSQL on first boot (docker-entrypoint-initdb.d). Prefix 25.
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- 지급 원장 (payout)
|
|
-- status: R=요청, H=보류, A=승인, J=반려, F=파일편성, P=지급완료,
|
|
-- C=취소, V=역분개, X=마감
|
|
-- ---------------------------------------------------------------------------
|
|
CREATE SEQUENCE IF NOT EXISTS py_payout_seq;
|
|
CREATE TABLE IF NOT EXISTS py_payout (
|
|
payout_id BIGINT PRIMARY KEY,
|
|
merchant_id TEXT NOT NULL DEFAULT '',
|
|
account_no TEXT NOT NULL DEFAULT '',
|
|
amount BIGINT NOT NULL,
|
|
fee BIGINT NOT NULL DEFAULT 0,
|
|
net BIGINT NOT NULL,
|
|
status TEXT NOT NULL,
|
|
channel TEXT NOT NULL DEFAULT 'STD', -- STD/SPLIT/BULK/ADVANCE
|
|
file_id BIGINT NOT NULL DEFAULT 0,
|
|
retry_count INTEGER NOT NULL DEFAULT 0,
|
|
reject_reason TEXT NOT NULL DEFAULT '',
|
|
biz_date DATE NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- 지급계좌 (py_account)
|
|
-- ---------------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS py_account (
|
|
account_no TEXT PRIMARY KEY,
|
|
merchant_id TEXT NOT NULL DEFAULT '',
|
|
bank_code TEXT NOT NULL DEFAULT '',
|
|
holder TEXT NOT NULL DEFAULT '',
|
|
balance BIGINT NOT NULL DEFAULT 0,
|
|
status TEXT NOT NULL DEFAULT 'ACTIVE',
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- 지급 파일 (py_file) - status: G=생성, C=확정
|
|
-- ---------------------------------------------------------------------------
|
|
CREATE SEQUENCE IF NOT EXISTS py_file_seq;
|
|
CREATE TABLE IF NOT EXISTS py_file (
|
|
file_id BIGINT PRIMARY KEY,
|
|
biz_date DATE NOT NULL,
|
|
file_name TEXT NOT NULL,
|
|
record_count BIGINT NOT NULL DEFAULT 0,
|
|
total_amount BIGINT NOT NULL DEFAULT 0,
|
|
status TEXT NOT NULL DEFAULT 'G',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
confirmed_at TIMESTAMPTZ
|
|
);
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- 지급 예약 (py_schedule) - status: S=예약, D=실행
|
|
-- ---------------------------------------------------------------------------
|
|
CREATE SEQUENCE IF NOT EXISTS py_schedule_seq;
|
|
CREATE TABLE IF NOT EXISTS py_schedule (
|
|
schedule_id BIGINT PRIMARY KEY,
|
|
payout_id BIGINT NOT NULL,
|
|
run_date DATE NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'S',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- 지급 조정 (py_adjust)
|
|
-- ---------------------------------------------------------------------------
|
|
CREATE SEQUENCE IF NOT EXISTS py_adjust_seq;
|
|
CREATE TABLE IF NOT EXISTS py_adjust (
|
|
adj_id BIGINT PRIMARY KEY,
|
|
payout_id BIGINT NOT NULL,
|
|
delta BIGINT NOT NULL,
|
|
reason TEXT NOT NULL DEFAULT '',
|
|
biz_date DATE NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- 지급 원장 상세 (py_ledger) - 이체/연계 원장
|
|
-- ---------------------------------------------------------------------------
|
|
CREATE SEQUENCE IF NOT EXISTS py_ledger_seq;
|
|
CREATE TABLE IF NOT EXISTS py_ledger (
|
|
ledger_id BIGINT PRIMARY KEY,
|
|
payout_id BIGINT NOT NULL,
|
|
entry_type TEXT NOT NULL,
|
|
amount BIGINT NOT NULL,
|
|
biz_date DATE NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- 가맹점 일별 지급 집계 (py_summary) - 배치/서비스가 채움
|
|
-- ---------------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS py_summary (
|
|
merchant_id TEXT NOT NULL,
|
|
biz_date DATE NOT NULL,
|
|
payout_count BIGINT NOT NULL DEFAULT 0,
|
|
payout_amount BIGINT NOT NULL DEFAULT 0,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
PRIMARY KEY (merchant_id, biz_date)
|
|
);
|
|
|
|
-- Seed payout accounts so PAY_REMIT/PAY_ACCTCHK have counterparties.
|
|
INSERT INTO py_account (account_no, merchant_id, bank_code, holder, balance, status) VALUES
|
|
('110-1234-567890', 'M0001', '020', '클라로 커피', 500000000, 'ACTIVE'),
|
|
('333-9876-543210', 'M0002', '088', '포지 마트', 500000000, 'ACTIVE'),
|
|
('456-0000-111222', 'M0003', '004', '클라로 면세점', 900000000, 'ACTIVE')
|
|
ON CONFLICT (account_no) DO NOTHING;
|