Wave K: 잔여 패리티 갭 완결 (패리티 80%→~87%)

패리티 분석의 남은 갭(온보딩·KYC·3자대사·ISO전문·계정체계·비기능)을 마무리.

■ 가맹점 생애주기 (75→90)
- mm_application(230): 온보딩/언더라이팅 심사(RECEIVED/UNDERWRITING/APPROVED/REJECTED).
- mm_kyc(1,150): KYC/AML 5종(IDENTITY/SANCTION/PEP/AML/CREDIT).
- 서비스 MM_ONBOARD(상태기계+MID발급, 부적법전이 거부)·MM_KYC_CHECK.

■ 원장·회계·대사 (80→90)
- lg_account(10): 계정과목 — suspense(미결)/clearing(정산대기) 분리.
- rc_3way(16,185): 3자대사 카드망↔내부원장↔은행입금. 서비스 RC_3WAY.

■ 클리어링·수수료 (75→85, 88→90)
- cl_presentment 프레젠트먼트 윈도우·late_flag, interchange downgrade(56,912).
- ISO8583 취소전문 0420, MONTHLY_DISCOUNT 펀딩모델 활성화(94,376).

■ 비기능 (50→58)
- docs/OPS_RUNBOOK.md: HA/DR·PCI·데이터보존·규제 설계 명시(코드불가 영역 정직 구분).

■ 화면·검증
- 시스템현황에 온보딩·KYC·3자대사 패널.
- 통합빌드 error 0, 5,915 서비스, 3본 실호출 검증(상태기계 부적법전이 거부), 6단체인 COMMIT OK, 미결2PC 0.
- 패리티 재채점 ≈87/100.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
hyeongwoo 2026-07-23 14:30:49 +09:00
parent d292772b1f
commit bba433308a
14 changed files with 695 additions and 173 deletions

View file

@ -0,0 +1,77 @@
-- ===========================================================================
-- 73-lifecycle.sql : 잔여 패리티 갭 (Wave K) — 온보딩·KYC·3자대사·ISO전문·계정
-- 가맹점 심사/언더라이팅, KYC/AML, 3자대사(망·내부·은행), 계정체계(suspense/
-- clearing), 프레젠트먼트 윈도우. 기존 구조 불변(추가만).
-- ===========================================================================
-- ---------------------------------------------------------------------------
-- K-1. 가맹점 온보딩 / 언더라이팅 (심사)
-- ---------------------------------------------------------------------------
CREATE SEQUENCE IF NOT EXISTS mm_app_seq START 300000;
CREATE TABLE IF NOT EXISTS mm_application (
app_id BIGINT PRIMARY KEY,
biz_no TEXT NOT NULL, -- 사업자등록번호
name TEXT NOT NULL,
mcc TEXT NOT NULL,
rep_name TEXT NOT NULL DEFAULT '', -- 대표자
est_monthly BIGINT NOT NULL DEFAULT 0, -- 예상 월매출
risk_score INTEGER NOT NULL DEFAULT 0, -- 언더라이팅 리스크(0~999)
status TEXT NOT NULL DEFAULT 'RECEIVED', -- RECEIVED/UNDERWRITING/APPROVED/REJECTED
reviewer TEXT,
decision_at TIMESTAMPTZ,
merchant_id TEXT, -- 승인시 발급된 MID
reject_reason TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS ix_app_status ON mm_application(status);
-- ---------------------------------------------------------------------------
-- K-2. KYC / AML 점검
-- ---------------------------------------------------------------------------
CREATE SEQUENCE IF NOT EXISTS mm_kyc_seq START 320000;
CREATE TABLE IF NOT EXISTS mm_kyc (
kyc_id BIGINT PRIMARY KEY,
app_id BIGINT,
merchant_id TEXT,
check_type TEXT NOT NULL, -- IDENTITY/SANCTION/PEP/AML/CREDIT
result TEXT NOT NULL DEFAULT 'PASS',-- PASS/FAIL/REVIEW
score INTEGER NOT NULL DEFAULT 0,
detail TEXT,
checked_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS ix_kyc_app ON mm_kyc(app_id);
-- ---------------------------------------------------------------------------
-- K-3. 3자 대사 (카드망 정산파일 ↔ 내부원장 ↔ 은행입금)
-- ---------------------------------------------------------------------------
CREATE SEQUENCE IF NOT EXISTS rc_3way_seq START 340000;
CREATE TABLE IF NOT EXISTS rc_3way (
recon_id BIGINT PRIMARY KEY,
biz_date DATE NOT NULL,
member_bin TEXT NOT NULL,
amt_network BIGINT NOT NULL DEFAULT 0, -- 카드망 정산파일 금액
amt_internal BIGINT NOT NULL DEFAULT 0, -- 내부 원장 금액
amt_bank BIGINT NOT NULL DEFAULT 0, -- 은행 실입금 금액
diff_ni BIGINT NOT NULL DEFAULT 0, -- 망-내부 차이
diff_nb BIGINT NOT NULL DEFAULT 0, -- 망-은행 차이
status TEXT NOT NULL DEFAULT 'MATCHED', -- MATCHED/DIFF/PENDING
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (biz_date, member_bin)
);
-- ---------------------------------------------------------------------------
-- K-4. 총계정 계정과목 (suspense/clearing 분리) — 원장 계정체계
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS lg_account (
acct_code TEXT PRIMARY KEY, -- 계정코드
acct_name TEXT NOT NULL,
acct_type TEXT NOT NULL, -- ASSET/LIABILITY/REVENUE/EXPENSE/SUSPENSE/CLEARING
normal_side TEXT NOT NULL DEFAULT 'D' -- 정상잔액 방향 D/C
);
-- ---------------------------------------------------------------------------
-- K-5. 프레젠트먼트 윈도우 / interchange downgrade 사유 (기존 테이블 확장)
-- ---------------------------------------------------------------------------
ALTER TABLE cl_presentment ADD COLUMN IF NOT EXISTS window_days INTEGER NOT NULL DEFAULT 1;
ALTER TABLE cl_presentment ADD COLUMN IF NOT EXISTS late_flag BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE st_fee_component ADD COLUMN IF NOT EXISTS downgrade TEXT; -- NULL=정상 등급, 값=강등사유