Wave G2: 경제모델 2·3순위 갭 (MCC interchange 등급·ISO8583 클리어링·이중/단일)

갭분석 2·3순위 보강. 전부 실측 검증.

① interchange qualification 심화 (MCC 업종별 등급)
- mm_merch_mcc: 40개 가맹점 → 실제 4자리 ISO MCC (커피 5814, 마트 5411,
  면세점 5309, 병원 8062, 주유소 5541, 여행사 4722, 숙박 7011 ...)
- mm_mcc: 26개 MCC + risk tier(1 저율/2 표준/3 고율)
- st_interchange_rate 에 MCC×카드종류 요율 override → fee_component 재계산
- 실측: tier1(병원0.69%/약국0.72%/주유0.75%) < tier2(요식~1.15%) < tier3(여행~1.62%)
  — 실제 매입사 interchange 차등 그대로. 3층 항등 7560/7560, 펀딩 2925/2925 유지.

② ISO 8583 클리어링 메시지 클래스 (승인전문과 분리된 클리어링 단계)
- mg_clearing: PRESENTMENT(1240)/CHARGEBACK(1442)/REPRESENT/RECONCILE(1500)/
  FEE_COLLECT(1740). 실측 8,658건.
- MG_CLEARING_INQ 서비스(mg, 120줄): 클래스/영업일/pid 필터 집계 조회.
  실호출 검증(DUAL 6,386 / SINGLE 2,272, 대표 MTI 1240).

③ 이중/단일 메시지 구분
- msg_type: 신용=DUAL(5,288) / 체크=SINGLE(2,272). 실제 dual/single-message 프로토콜.

포털 "정산 경제"(#econ)에 MCC 등급표 + ISO8583 클리어링 메시지표 추가.
통합 빌드 error 0, 도메인 5,883 서비스 AVAIL, 6단 체인 유지.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
hyeongwoo 2026-07-22 15:18:40 +09:00
parent 438ae8992d
commit 2ac4c3c920
8 changed files with 343 additions and 5 deletions

36
db/schema.d/71-econ2.sql Normal file
View file

@ -0,0 +1,36 @@
-- ===========================================================================
-- 71-econ2.sql : 매입사 경제모델 2차 고도화 (갭분석 2·3순위)
-- ① interchange qualification 심화: MCC(업종)별 요율 tier
-- ② ISO 8583 클리어링 메시지 클래스 (presentment/chargeback/recon/fee/reject)
-- ③ 이중메시지 vs 단일메시지 구분
-- ===========================================================================
-- ---------------------------------------------------------------------------
-- 1. 가맹점 → MCC 매핑 (실제 4자리 ISO MCC).
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS mm_merch_mcc (
merchant_id TEXT PRIMARY KEY,
mcc TEXT NOT NULL
);
-- ---------------------------------------------------------------------------
-- 2. ISO 8583 클리어링 메시지 (승인전문 mg_msg_log 과 별개인 클리어링 단계).
-- msg_class: 실제 ISO 8583 클리어링 기능 (Berlin Group).
-- msg_type : DUAL(신용/서명-승인과 클리어링 분리) / SINGLE(PIN/직불-통합).
-- ---------------------------------------------------------------------------
CREATE SEQUENCE IF NOT EXISTS mg_clearing_seq START 500000;
CREATE TABLE IF NOT EXISTS mg_clearing (
clr_id BIGINT PRIMARY KEY,
purchase_id BIGINT,
scheme TEXT NOT NULL DEFAULT 'BC',
msg_class TEXT NOT NULL, -- PRESENTMENT/CHARGEBACK/REPRESENT/RECONCILE/FEE_COLLECT/FILE_REJECT
mti TEXT NOT NULL, -- 1240(1st present)/1442(chargeback)/1740(fee)/1500(recon)/1644(file action)
msg_type TEXT NOT NULL DEFAULT 'DUAL', -- DUAL / SINGLE
amount BIGINT NOT NULL DEFAULT 0,
biz_date DATE NOT NULL,
status TEXT NOT NULL DEFAULT 'ACCEPTED', -- ACCEPTED/REJECTED
reject_code TEXT, -- 파일/메시지 거부 사유
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS ix_clearing_pid ON mg_clearing(purchase_id);
CREATE INDEX IF NOT EXISTS ix_clearing_class ON mg_clearing(msg_class);